banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

#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: 1538

Re: recuperation enregistrement en cours trigger update - postgreSQL

jims a écrit:

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

 

Pied de page des forums

Powered by FluxBB