|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre actif
![]() Inscription : juin 2002 Messages : 379 ![]() |
Bonjour,
J'ai une table d'article, compose de plusieurs champs : TABLEA(Champ A1,Champ A2,Champ A3), A1 Cle primaire. Dans cette table, je peux avoir des article qui sont "lies" entre eux par le champ A2. Si je modifie A3, je veux que cette modif soit repercutee dans les autres enregistrements qui lui sont lies. Alors je fais mon petit trigger before update : Code :
Et depuis, je cherche le meilleur moyen de faire mon truc. Et le seul moyen que j'ai trouve, c'est de faire cette operation depuis une procedure stockee, qui serait appeler depuis l'appli. Et ca m'oblige, dans mon appli, a creer explicitement une transaction, et a faire toute une batterie de teste supplementaire pour chaque modif d'enregistrement. Alors que ce cas de figure, est "exceptionnel". Est ce qu'il y aurait une autre solution ? Merci d'avance. |
||
|
|
00
|
|
|
#2 |
|
Membre éprouvé
![]() Inscription : juillet 2002 Messages : 432 ![]() |
Juste une idée :
Si tu mettais ton trigger sur une vue qui sera identique à ta table et par ce tigger mettre à jour les champs de la table en question tu n'aura pas à ce que je pense ce genre de cycle. et depuis ton programme tu travail sur la vue quand tu veux que ce trigger se déclenche.
__________________
<On fait la science avec des faits, comme on fait une maison avec des pierres : mais une accumulation de faits n'est pas plus une science qu'un tas de pierres n'est une maison> **Poincaré** http://www.mobile-tactile.com/ |
|
|
00
|
|
|
#3 |
|
Membre éclairé
![]() Inscription : décembre 2004 Messages : 379 ![]() |
ton problème est la récursivité, tu update un champ qui déclenche un trigger qui lui change le champ qui redéclenche le trigger...
pour régler cela, il faut utiliser les triggers de type AFTER les triggers "before" assure la mise à jour en "ligne" et les triggers "after" assure la cascade et cela fonctionnera. le tout et de prévoir un test qui permet d'arrêter "la remontée" sinon, le système tournera indéfiniment sur la "dernière" ligne bien sûr les modifs en ligne (before) ne se font pas par un "update"!!! la commande update est à utiliser dans les triggers "after"!! |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com