Vous n'êtes pas identifié(e).
Pages : 1
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
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
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
Non. Je ne vois pas le rapport.
Marc.
Hors ligne
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
Ah oui. C'est une variable. Comment l'utilisez vous ?
Marc.
Hors ligne
De cette façon :
test:='* FROM testtrigger WHERE id = ' || NEW.id || '' ;
Hors ligne
la fonction initialisation est bien déclarée en 'returns trigger' ?
le trigger est bien déclaré en 'for each row' ?
Marc.
Hors ligne
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
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
J'ai déclaré le trigger en for each row et ca marche.
merci beaucoup !
Hors ligne
Pages : 1