|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre régulier
![]() Inscription : juillet 2005 Messages : 93 ![]() |
Bonjour
Je souhaiterai savoir s'il est possible, sous Oracle 9i, de créer un trigger s'exécutant suite à un update ou un insert et mettant à jour une colonne de cette même table (par un update) sans déclencher de boucle...ou en la controlant... Merci, Thig |
|
|
00
|
|
|
#2 | ||
|
Membre actif
![]() Inscription : août 2007 Messages : 176 ![]() |
Il faut créer un trigger BEFORE INSERT OR UPDATE, si tu veux modifier la ligne en cours d'insertion/modification.
Du style, tu auras un code du style : (euh, c'est un exemple à ne pas prendre à la lettre, c'est l'idée qui est importante) Code :
|
||
|
|
00
|
|
|
#3 |
|
Membre régulier
![]() Inscription : juillet 2005 Messages : 93 ![]() |
Merci, pour ta réponse
Pour que je comprenne bien : Si je fais un update sur la colonne x de ma table, le trigger update se déclenche avant que la modif soit réellement faite sur la colonne x ... et je peux en profiter pour modifier la valeur d'une autre colonne y pour la même ligne en faisant dans le trigger qlq chose comme : :new.y := ma_nouvelle_valeur et j'empêche la boucle en faisant un test sur par exemple une date de modif c'est bien ca ? on peut dire que : new.y = sysdate <=> update table set y = sysdate where ... et sa déclenche aussi le trigger ? Merci |
|
|
00
|
|
|
#4 |
|
Expert Confirmé Sénior
![]() Inscription : juillet 2003 Messages : 3 450 ![]() |
Non, ce n'est pas une instruction UPDATE.
C'est modifier l'enregistrement. Ca ne va pas redéclencher un trigger.
__________________
More Code : More Bugs. Less Code : Less Bugs |
|
|
00
|
|
|
#5 |
|
Membre régulier
![]() Inscription : juillet 2005 Messages : 93 ![]() |
Donc, j'ai pas besoin du test :
if :old.date_derniere_modification < sysdate then ... pour empêcher la boucle, c'est bien ça ? |
|
|
00
|
|
|
#6 |
|
Expert Confirmé Sénior
![]() Inscription : juillet 2003 Messages : 3 450 ![]() |
Oui, c'est ça, tu n'aura pas de boucle.
__________________
More Code : More Bugs. Less Code : Less Bugs |
|
|
00
|
|
|
#7 | |||
|
Membre actif
![]() Inscription : août 2007 Messages : 176 ![]() |
Citation:
non, je t'ai induit en erreur avec ma ligne de code, ce n'est pas le test en lui-même qui empêche la boucle, c'est le trigger before update en lui-même Cela se passe ainsi :
Code :
|
|||
|
|
00
|
|
|
#8 |
|
Membre régulier
![]() Inscription : juillet 2005 Messages : 93 ![]() |
Mais c'est superbe !
Merci, A+ Thig |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com