PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 11/05/2010 14:53:10

floriaan60
Membre

Trigger et appel de fonction

Bonjour,

j'ai créé le trigger suivant:

CREATE TRIGGER AFTER INSERT
ON capteur
EXECUTE PROCEDURE initialisation()

Je souhaite donc, à l'issue d'un INSERT sur la table capteur, appeler la fonction initialisation().

Cependant, en argument de ma fonction, j'aimerai lui passer l'id du capteur qui vient d'être inséré mais je ne vois pas comment faire ...

Quelqu'un peut-il m'aider ?

Hors ligne

#2 11/05/2010 15:01:39

Marc Cousin
Membre

Re : Trigger et appel de fonction

Pas la peine. L'enregistrement sera accessible en tant que 'NEW' dans la fonction initialisation.
Si par exemple, le champ s'appelle id, vous pourrez y accéder dans le code en tant que
NEW.id


Marc.

Hors ligne

#3 11/05/2010 15:15:03

floriaan60
Membre

Re : Trigger et appel de fonction

D'accord.

Pour cela je vois qu'il faut créer une règle (RULE) mais je ne comprend pas très bien sa nécessite ... ?

Hors ligne

#4 11/05/2010 15:19:07

Marc Cousin
Membre

Re : Trigger et appel de fonction


Marc.

Hors ligne

#5 11/05/2010 15:21:24

floriaan60
Membre

Re : Trigger et appel de fonction

J'ai lu cette page mais au moment de créer ma fonction j'ai l'erreur suivant:

ERROR:  NEW used in query that is not in a rule

Hors ligne

#6 11/05/2010 15:24:26

Marc Cousin
Membre

Re : Trigger et appel de fonction

Ah oui. C'est une variable. Comment l'utilisez vous ?


Marc.

Hors ligne

#7 11/05/2010 15:25:43

floriaan60
Membre

Re : Trigger et appel de fonction

De cette façon :

 test:='* FROM testtrigger WHERE id = ' || NEW.id || '' ;

Hors ligne

#8 11/05/2010 15:44:24

Marc Cousin
Membre

Re : Trigger et appel de fonction

la fonction initialisation est bien déclarée en 'returns trigger' ?

le trigger est bien déclaré en 'for each row' ?


Marc.

Hors ligne

#9 11/05/2010 15:57:03

floriaan60
Membre

Re : Trigger et appel de fonction

CREATE TRIGGER test AFTER INSERT 
ON testtrigger
EXECUTE PROCEDURE testtrigger() ;

CREATE OR REPLACE FUNCTION testtrigger() RETURNS trigger as $test$
DECLARE
	test text ;
	test2 text ;
BEGIN
	test2:='nom FROM testtrigger WHERE id ='||NEW.id||'';
	EXECUTE test2 INTO test ;
	RETURN NEW;
END ;
$test$ LANGUAGE 'plpgsql';

Me renvoi l'erreur :

ERROR:  record "new" is not assigned yet
DÉTAIL : The tuple structure of a not-yet-assigned record is indeterminate.

Hors ligne

#10 11/05/2010 16:01:04

gleu
Administrateur

Re : Trigger et appel de fonction

Vous êtes donc en « FOR EACH STATEMENT », vu qu'il s'agit de la valeur par défaut. Voir http://docs.postgresql.fr/8.4/sql-createtrigger.html pour les détails.


Guillaume.

Hors ligne

#11 11/05/2010 16:06:38

floriaan60
Membre

Re : Trigger et appel de fonction

J'ai déclaré le trigger en for each row et ca marche.

merci beaucoup !

Hors ligne

Pied de page des forums