#1 Fri 13 December 2013 14:04
- Philippe DESVIGNES
- Participant occasionnel
- Lieu: CHATELLERAULT
- Date d'inscription: 11 Apr 2006
- Messages: 41
Equivalence Trigger Oracle
Bonjour à tous,
J'ai créé, en leur temps des Triggers, qui me permettaient de renseigner les champs "USERNAME" (à partir de l'identifiant Novell)
et le champ "DATE_MAJ" (à partir de la date Système) dans une table Oracle avec les codes suivants.
/* Champ USERENAME */
CREATE OR REPLACE TRIGGER "VDC_ADRESSE"."TRIG_MAJ_USER_NUMERO"
BEFORE insert or update
on VDC_ADRESSE.NUMEROS_VOIRIE
REFERENCING NEW AS NEW
FOR EACH ROW
BEGIN
:NEW.USERNAME:= SYS_CONTEXT('USERENV','OS_USER');
END;
et
/* Champs DATE_MAJ */
CREATE OR REPLACE TRIGGER TRIG_MAJ_DATE_TRONCONS
BEFORE insert or update
on VDC_ADRESSE.VOIES_TRONCONS
REFERENCING NEW AS NEW
FOR EACH ROW
BEGIN
:NEW.DATE_MAJ:= sysdate;
END;
Nous sommes maintenant passé sous PostGres/PostGis et je n'arrive pas à créer les triggers équivalents.
Je suis novice en PostGres/PostGis et n'est pas réussi à trouver la solution sur le forum (mais peut m'y suis-je mal pris)ni sur d'autres sites.
J'ai bien compris que cela se faisait en deux étapes :
La création d'une fonction puis la création du trigger.
Je galère depuis ce matin, et multiplie les erreurs de syntaxe notamment dans la création de la fonction.
Quelqu'un d'entre vous peut-il me venir en aide?
Je vous remercie par avance.
Cordialement
Hors ligne
#2 Fri 13 December 2013 15:16
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: Equivalence Trigger Oracle
Bonjour,
Postgresql permet de définir des triggers en créant des fonctions qui sont executées par le trigger, pas en definissant directement le code dans le trigger, comme le propose Oracle. (exemples ici: http://www.postgresql.org/docs/9.3/stat … gger.html)
Dans votre cas, il faut d'abord créer la fonction, puis définir le trigger utilisant cette fonction:
Code:
CREATE OR REPLACE FUNCTION setUser() RETURNS trigger AS $$ BEGIN NEW.username := $user; RETURN NEW; END; $$ LANGUAGE plpgsql; CREATE TRIGGER setUserTrigger BEFORE INSERT OR UPDATE ON VDC_ADRESSE.NUMEROS_VOIRIE FOR EACH ROW EXECUTE PROCEDURE setUser();
(Je ne sais pas si on peut récupérer le user système depuis Postgresql, par contre. $user représente le user PG qui effectue la requete)
NIcolas
Hors ligne