Bonjour,
Je souhaite créer un trigger pour recréer une ligne supprimée.
Explication :
Une application peut être amenée à supprimer des lignes dans une table A. Désormais, je dois garder une trace de cette suppression. Pour cela, j'ai créé un nouveau champ IS_DELETE dans ma table A. Il n'est pas possible de modifier l'application existante (remplacer l'ordre "DELETE FROM A WHERE ID = ...) par UPDATE A SET IS_DELETE = 'Y' WHERE ID = ...).
Je pensais donc utiliser un trigger mais j'ai un problème de table mutante.
J'ai même essayé d'utiliser une table temporaire et d'utiliser deux trigger mais cela ne fonctionne pas.
Script 1er trigger :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 CREATE OR REPLACE TRIGGER TRG_IS_DELETE1 BEFORE DELETE ON A FOR EACH ROW BEGIN INSERT INTO A_TEMP (ID,IS_DELETE) VALUES (:old.ID,'Y'); END; /
Script 2ème trigger :
Je ne sais plus trop comment m'en sortir. J'aurai aimé le gérer avec un seul trigger sans table temporaire mais j'ai l'impression que ce n'est pas possible.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 CREATE OR REPLACE TRIGGER TRG_IS_DELETE2 AFTER INSERT ON A_TEMP FOR EACH ROW BEGIN INSERT INTO A (ID,IS_DELETE) SELECT ID, IS_DELETE FROM A_TEMP; DELETE FROM A_TEMP; END; /
De plus, avec 2 triggers et une table temporaire, je n'y arrive même pas.
Quelqu'un peut-il m'aider ?
Merci
Partager