1 pièce(s) jointe(s)
Trigger invalidant la donnée au lieu de la supprimer
Bonjour,
j'essaie de de créer un trigger qui invalide la donnée au lieu de la supprimer, mais j'ai beau retourner ça dans tous les sens, je ne vois pas comment faire.
Voici les tables concernées :
Pièce jointe 591145
L'objectif est que si un utilisateur essaie de supprimer un objet dans TA_TABLE_1, plutôt que d'obtenir le message d'erreur lui disant que la suppression est impossible en raison d'un enregistrement fils existant (ce qu'il ne comprendra pas), le champ FID_STATUT de l'objet obtienne la valeur 358 afin d'invalider cet objet.
J'ai pensé au code suivant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
create or replace TRIGGER B_DXX_TEST
BEFORE UPDATE OR DELETE ON TA_TABLE_1
FOR EACH ROW
DECLARE
BEGIN
BEGIN -- Ce bloc permet de bloquer la suppression de l'objet en permettant au reste du code d'être exécuté dans le bloc principal
IF DELETING THEN
RAISE_APPLICATION_ERROR(-20001, 'Suppression impossible, l''objet va être mis en "invalide".');
END IF;
END;
-- Passage de l'objet en "invalide"
:new.FID_STATUT := 358;
EXCEPTION
WHEN OTHERS THEN
mail.sendmail('toto@gmail.com',SQLERRM,'ERREUR TRIGGER - TA_TABLE_1','TRIGGER@gmail.com');
END; |
Le trigger est compilé et quand je tente de supprimer l'objet depuis mon application, la suppression est empêchée et j'obtiens un mail avec mon message d'erreur.
Par contre, le champ FID_STATUT, lui, n'est pas mis à jour et je ne comprends pas pourquoi. Quelqu'un pourrait-il éclairer ma lanterne ?
Merci d'avance.