Vous n'êtes pas identifié(e).
Bonjour,
J'ai plusieurs tables dans ma DB. L'une d'elle contient un champ qui doit être mis à jour chaque fois qu'une query / transaction / tache est faites sur certaines tables.
Par exemple ci-dessous SubOne et SubTwo référencent Main.
Chaque fois qu'une action (INSERT, UPDATE ou DELETE) est fait sur une de ces trois tables (pas sur la table Other) j'ai besoin de lancer cette query :
update Main set contactedat=CURRENT_TIMESTAMP where mainId= /* mainId des data modifiées*/
Est-ce que je suis obligé de définir ces 3 triggers pour chaque table concernée ou y a-t-il un moyen plus simple ?
Merci d'avance!
CREATE TABLE Main (
mainId serial PRIMARY KEY NOT NULL,
contactedAt timestamp with time zone NOT NULL DEFAULT CURRENT_DATE,
name text NOT NULL
);
CREATE TABLE SubOne (
subOneId serial PRIMARY KEY NOT NULL,
mainId integer NOT NULL REFERENCES Main(mainId),
subOneName text DEFAULT null
);
CREATE TABLE SubTwo (
SubTwoId serial PRIMARY KEY NOT NULL,
mainId integer NOT NULL REFERENCES Main(mainId),
subOneName text DEFAULT null
);
CREATE TABLE Other (
otherId serial PRIMARY KEY NOT NULL,
name varchar(60) NOT NULL
);
Hors ligne
Vous êtes obligé de définir les 3 triggers. Par contre rien ne vous empêche, d'avoir une seule fonction que les 3 triggers appellent...
Marc.
Hors ligne
Ça peut être un seul trigger par table :
CREATE TRIGGER... BEFORE INSERT OR UPDATE OR DELETE...
Guillaume.
Hors ligne
Merci pour vos réponses
Il y a un autre champs que je dois mettre à jour pour l'UPDATE, donc je suppose que je dois effectivement faire chaque Trigger
Hors ligne
Vous pouvez aussi dans le code du trigger déterminer sur quelle table il est en train de s'exécuter, c'est un compromis entre duplication de code et simplicité des fonctions trigger
Marc.
Hors ligne