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 :

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;
/
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.

De plus, avec 2 triggers et une table temporaire, je n'y arrive même pas.

Quelqu'un peut-il m'aider ?

Merci