Pages: 1
- Sujet précédent - recuperation enregistrement en cours trigger update - postgreSQL - Sujet suivant
#1 Wed 25 March 2009 12:34
- jims
- Juste Inscrit !
- Date d'inscription: 4 Oct 2007
- Messages: 5
recuperation enregistrement en cours trigger update - postgreSQL
Bonjour,
svp aidez moi,
je vous remercie d'avance.
J'ai deux tables t1 champs1 (PK) , champs2 (FK) , champs3, champs4 et table t2 (même structure mais quelques champs champs1 , champs2 , champs4)
je veux bien récupérer l'enregistrement modifié (cellule) de la table t1 et insérer une copie d' informations reliées dans la table t2.
j'ai essayé ceci mais ne marche pas, erreur ! (au niveau de ligne 6 au moment de update retour plusieurs lignes (v_id_route)
j'ai essayé {select into v_id_route (select id_route from ROUTE where id_route =new.id_route )};
ainsi que
{select into v_id_route (select id_route from ROUTE where old.id_route<>new.id_route )};
mon soucis est de récupérer l'ID (PK) et aussi la ligne ou il a eu une modification.
-------------------------------------------------------------
table route ( id_num (PK), id_route (FK),...)
table route_copy (id_num, id_route,...)
Trigger (declencheur after update) déclenché sur la table route (table1)
__________________________________________________________________
CREATE OR REPLACE FUNCTION maj_route() RETURNS SETOF "trigger" AS
$BODY$DECLARE
v_id_route ROUTE.id_route%type;
BEGIN
IF (TG_OP = 'UPDATE') THEN
select into v_id_route (select id_route from ROUTE where id_route =new.id_route );
update ROUTE_COPY set id_route = v_id_route where id_route =new.id_route ;
END IF;
return null;
end;$BODY$
LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION maj_route() OWNER TO postgres;
Hors ligne
#2 Tue 14 April 2009 16:30
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: recuperation enregistrement en cours trigger update - postgreSQL
Bonjour,
svp aidez moi,
je vous remercie d'avance.
J'ai deux tables t1 champs1 (PK) , champs2 (FK) , champs3, champs4 et table t2 (même structure mais quelques champs champs1 , champs2 , champs4)
je veux bien récupérer l'enregistrement modifié (cellule) de la table t1 et insérer une copie d' informations reliées dans la table t2.
j'ai essayé ceci mais ne marche pas, erreur ! (au niveau de ligne 6 au moment de update retour plusieurs lignes (v_id_route)
j'ai essayé {select into v_id_route (select id_route from ROUTE where id_route =new.id_route )};
ainsi que
{select into v_id_route (select id_route from ROUTE where old.id_route<>new.id_route )};
mon soucis est de récupérer l'ID (PK) et aussi la ligne ou il a eu une modification.
-------------------------------------------------------------
table route ( id_num (PK), id_route (FK),...)
table route_copy (id_num, id_route,...)
Trigger (declencheur after update) déclenché sur la table route (table1)
__________________________________________________________________
CREATE OR REPLACE FUNCTION maj_route() RETURNS SETOF "trigger" AS
$BODY$DECLARE
v_id_route ROUTE.id_route%type;
BEGIN
IF (TG_OP = 'UPDATE') THEN
select into v_id_route (select id_route from ROUTE where id_route =new.id_route );
update ROUTE_COPY set id_route = v_id_route where id_route =new.id_route ;
END IF;
return null;
end;$BODY$
LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION maj_route() OWNER TO postgres;
Bonjour,
Utilises-tu les variables OLD et NEW mises a disposition par le mecanisme de trigger, qui servent justement a manipuler l'ancienne valeur (OLD) ou la nouvelle (NEW)
Fais egalement attention a la definition du trigger: ON BEFORE ou ON AFTER, pour etre sur de realiser la bonne operation
HTH.
Nicolas
Hors ligne
Pages: 1
- Sujet précédent - recuperation enregistrement en cours trigger update - postgreSQL - Sujet suivant