|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : janvier 2007 Messages : 5 ![]() |
Bonjour,
Voila mon problème : J'ai 2 triggers sur une même table -Un after insert,update,delete for each row -Un after insert,updat,delete Lorsque j'effectue un delete sur la table concernée, le trigger qui s'effectue sur toute la table (le 2eme) est exécuté 2 fois : - Une fois en passant dans la partie If updating ... end if; - Une autre fois en passant dans la partie If deleting... end if; Comment se fait-il qu'il soit exécuté comme si un update avait été fait? Je précise qu'aucun update sur la table n'est effectué dans le code de ce trigger. Merci d'avance |
|
|
00
|
|
|
#2 |
|
Membre éprouvé
![]() Inscription : décembre 2007 Messages : 354 ![]() |
comment vous vous rendez compte que le trigger s'exécute deux fois?
|
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : janvier 2007 Messages : 5 ![]() |
J'ai mis des instructions dms_output.put_line et j'ai fait un delete sur ma table. En regardant le output, je vois qu'il s'execute 2 fois (2 fois les traces).
|
|
|
00
|
|
|
#4 |
|
Membre éprouvé
![]() Inscription : décembre 2007 Messages : 354 ![]() |
DBMS_OUTPUT a bien été mis dans la partie if updating ...end if?
Avez vous essayé de produire deux sorties différentes dans les deux parties de code "if updating" et "if deleting"? |
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Inscription : janvier 2007 Messages : 5 ![]() |
Oui c'est ce que j'ai fait.
J'ai mis un dbms_output affichant "debut" au tout debut du trigger. J'ai mis "udpate" dans le if updating ... end if J'ai mis "delete" dans le if deleting... end if Mon resultat : debut update debut delete Précisions : Je suis avec une version 8.1.7 d'oracle |
|
|
00
|
|
|
#6 |
|
Membre éprouvé
![]() Inscription : décembre 2007 Messages : 354 ![]() |
Il n'y a pas de contraintes référentielle de la table sur elle-même?
|
|
|
00
|
|
|
#7 |
|
Invité de passage
![]() Inscription : janvier 2007 Messages : 5 ![]() |
Je n'ai pas de contrainte réferentielle sur la table elle même. J'ai des contraintes vers d'autres tables.
|
|
|
00
|
|
|
#8 |
|
Membre éprouvé
![]() Inscription : décembre 2007 Messages : 354 ![]() |
Il reste un seul cas en dehors des triggers:
Une contrainte référentielle sur la table t1 qui référence une autre soit t2. Maintenant si un "delte" de la table t1 provoque un "delete" de la table t2 qui à son tour et à cause de la contrainte référentielle sur t1 provoquerait un update si la contrainte est définie on delete set null |
|
|
00
|
|
|
#9 |
|
Invité de passage
![]() Inscription : janvier 2007 Messages : 5 ![]() |
J'ai trouvé.
En fait il y a une contrainte réferentielle sur une autre table t2 avec un delete cascade. Le delete sur ma premiere table t1 declenche un delete des enregistrements fils sur t2. Il y a un trigger on delete sur t2. Ce trigger effectue un update sur t1 => d'où le déclenchement du trigger after update sur t1. Merci pour votre aide. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com