[Oracle] Casse tete avec des triggers qui s'auto paralysent...

Casse tete avec des triggers qui s'auto paralysent... [Oracle] - SQL/NoSQL - Programmation

Marsh Posté le 26-05-2003 à 13:56:51    

Voila une vision simplifiee du probleme :
 
------    -------     -------
-     -    -      -     -      -  
-  1 ------  2  -------  3  -
-     -    -      -     -      -  
------    -------     -------
 
Voici mes 3 tables. Les tables 1 et 3 referencent la table 2 dans un champ avec une cle etrangere. Les tables 1 et 3 dependent donc de la table 2.  
Maintenant je dois activer la suppression en cascade. Donc lorsque je supprime un enregistrement de la table 2, les enregistrements de 1 et de 3 qui y font referencent sautent aussi. C'est pile poil ce que je veux, jusque là ca va.
 
Le truc, c'est que j'ai des triggers qui se declenchent lors de suppression sur 1 et 3 et qui se font appel mutuellement. Je m'explique :
 
je supprime un enregistrement de 2, ca supprime dans 1 et 3. Le trigger de suppression de 1 (trig1) se declenche, pareil pour celui de 3 (trig3). Trig1 doit interroger la table 3 et trig3 doit interroger la table 1... et la paf ! message d'erreur classique "table en mutation, le trigger ne peut pas voir..."
 
Je peux faire quoi ?


Message édité par Masure le 26-05-2003 à 14:01:16
Reply

Marsh Posté le 26-05-2003 à 13:56:51   

Reply

Marsh Posté le 26-05-2003 à 14:00:37    

C'est important tes triggers sur 1 et 3 ?
 
Si oui, pourquoi ne pas les déclencher avec un trigger sur 2 qui se lance juste avant la délétion ?

Reply

Marsh Posté le 26-05-2003 à 14:05:58    

Les triggers sont tres importants
 
C'est vraiment pas logique de declencher sur 2 et ca me ferait mal. Ca oblige a controller bcp de choses qui decoulent de cette liaison avec 1 et 3... mais si c'est la seule solution, ben tant pis alors, je ferais qqchose qui n'est pas tres logique/cohérent. C'est bien dommage que les triggers bloquent l'acces aux tables pendant l'exec.

Reply

Marsh Posté le 26-05-2003 à 14:26:16    

Nouvelles infos :
 
en fait ce ne sont pas les triggers qui s'auto paralysent mais le delete en cascade qui bloque les triggers qui doivent operer sur la table qui se supprime (du moins je crois).
 
Donc pour la suppression en cascade, il ne faut que je fasse appel a l'option d'oracle on delete cascade qui fait ca sauvagement. Vu que j'utilise PHP, il suffit que je me gere la suppression en cascade via le langage php.
 
Nan ?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed