Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
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é ?

Annonce

Printemps des cartes 2024

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

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

 

Pied de page des forums

Powered by FluxBB