[postgresql] trigger, j'ai du mal

trigger, j'ai du mal [postgresql] - SQL/NoSQL - Programmation

Marsh Posté le 05-12-2003 à 10:52:02    

Bonjour,  
Je dois recuperer a partir d'une table FACTURERCLI, la quantite (qtefactcli) d'un produit et mettre a jour la table produit (idprod, qtestock)
 
j'ai essaye plusieurs choses mais c'est un peu la choucroute :

Code :
  1. create trigger tgfactcli
  2. AFTER INSERT
  3. on FACTURERCLI FOR EACH ROW
  4. (
  5.    IF new:qtefactcli < (select qtestock from produit pd where pd.idprod = new:idprod;)
  6.    then update produit set qtestock=qtestock-new:qtefactcli from produit pd where pd.idprod=new:idprod;
  7.    end if;
  8. );


 
 
 
Je n'arrive pas à savoir si postgres comprend new:blabal  ?
si ce n est pas possible il faut alors que je passe par une procedure et ce que je veux faire sans les new: est ...
 
si vous pouviez prendre le temps de m'aider ;)  
 
merci d avance


Message édité par GUG le 05-12-2003 à 10:52:18
Reply

Marsh Posté le 05-12-2003 à 10:52:02   

Reply

Marsh Posté le 05-12-2003 à 11:00:11    

GUG a écrit :


Je n'arrive pas à savoir si postgres comprend new:blabal  ?
si ce n est pas possible il faut alors que je passe par une procedure et ce que je veux faire sans les new: est ...
 
si vous pouviez prendre le temps de m'aider ;)  
 
merci d avance


c'est new.blabla


Message édité par Harkonnen le 05-12-2003 à 11:00:35
Reply

Marsh Posté le 05-12-2003 à 11:01:28    

T'as pas regardé la doc toi :/
 
http://www.postgresql.org/docs/7.3 [...] igger.html


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 05-12-2003 à 11:06:47    

bah si justment ... :/  
mais j ai mal lu  
merci new.

Reply

Marsh Posté le 05-12-2003 à 11:20:44    

que veux dire  
return type trigger is only a shell (lors de la creation de fonction)
et
ERROR:  CreateTrigger: function fcfactcli() must return OPAQUE
 
merci d avance

Reply

Marsh Posté le 05-12-2003 à 11:23:26    

GUG a écrit :

que veux dire  
return type trigger is only a shell (lors de la creation de fonction)
et
ERROR:  CreateTrigger: function fcfactcli() must return OPAQUE
 
merci d avance
 


chaque fonction utilisée comme trigger doit retourner le type OPAQUE, c'est obligatoire

Reply

Marsh Posté le 05-12-2003 à 11:45:01    

j ai trouver ca sur opaque  
 

Code :
  1. * Sometimes OPAQUE means "this function doesn't return anything at all",
  2.   similarly to "returns void" in C and some other languages.
  3. * Sometimes OPAQUE means "this value can be any datatype at all" (eg,
  4.   input of the count() aggregate).
  5. * Sometimes OPAQUE means "I know exactly what this should be, but it's
  6.   an internal datatype with no SQL-level equivalent".  This is usually
  7.   what's at stake with a trigger function.
  8. * Sometimes OPAQUE means "I know exactly what this should be, but I
  9.   haven't declared it yet" (ie, a forward reference).  This is needed
  10.   to declare I/O functions of user-defined types, since the system
  11.   requires the functions to already exist when the type is declared.


 
 
j ai fait ca :  
 

Code :
  1. create or replace  FUNCTION fcfactcli () RETURNS TRIGGER AS '
  2. BEGIN
  3.     IF    NEW.qtefactcli <  (select qtestock from produit pd where pd.idprod = NEW.idprod;)
  4.     then
  5.          update produit set qtestock=qtestock-NEW.qtefactcli from produit pd where pd.idprod=NEW.idprod;
  6.     end if;
  7. RETURN 0;
  8. END;
  9. ' LANGUAGE 'plpgsql';


 
ca me repond :
NOTICE:  return type trigger is only a shell
CREATE
 
 
je cree le trigger :  
 

Code :
  1. create trigger tgfactcli
  2. AFTER INSERT
  3. on FACTURERCLI FOR EACH ROW
  4. EXECUTE PROCEDURE fcfactcli();


 
et la ca me repond :  
ERROR:  CreateTrigger: function fcfactcli() must return OPAQUE
 
 
j'ai essayé avec RETURN NEW;
ca fait pareille ... alors je comprend pas vraiment ... pourquoi retourner un 0 c'est pas bon ?


Message édité par GUG le 05-12-2003 à 11:50:22
Reply

Marsh Posté le 05-12-2003 à 11:48:44    

bon je suis un boulet et un gros  
remplace  
create or replace  FUNCTION fcfactcli () RETURNS TRIGGER AS '
 
par
create or replace  FUNCTION fcfactcli () RETURNS OPAQUE AS '
 
merci a tous :)
 
mainteant faut que je fasse une zolie fonction qui marche bien


Message édité par GUG le 05-12-2003 à 11:50:45
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed