Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#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
Non. Je ne vois pas le rapport.
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
Pages : 1