[Résolu][Oracle] Mutating table sur un update

Mutating table sur un update [Résolu][Oracle] - SQL/NoSQL - Programmation

Marsh Posté le 12-01-2006 à 13:51:57    

Environnement Oracle 8i.
 
J'ai deux tables, A et B.
Je dois mettre à jour un champ de la table A en utilisant des champs contenus dans la table A et la table B.
Cette mise à jour étant un minimum complexe, une fonction est utilisée pour calculer la nouvelle valeur.
 
Problème: mettre un jour un champ de A avec une fonction qui accède à A et B, ça renvoie invariablement:
ORA-04091: table A en mutation, déclencheur/fonction de peut pas la voir.
 
J'ai cherché à droite et à gauche sur le net, mais je n'ai pas trouvé grand chose, la plupart du temps les pages qui traitent de cette erreur le font dans le cadre d'un trigger, ce qui n'est pas mon cas.
 
Quelles sont les solutions dont je dispose pour contourner le problème, sachant que toute modification du schéma de la base est à éviter ?
Merci par avance.


Message édité par KrisCool le 12-01-2006 à 15:30:55

---------------
Loose Change Lies | Bars | Last.fm
Reply

Marsh Posté le 12-01-2006 à 13:51:57   

Reply

Marsh Posté le 12-01-2006 à 14:39:12    

http://sgbd.developpez.com/oracle/ora-04091/ :)
 
c'est quoi le code qui déclenche ton erreur ?
 
Si la fonction est utilisée dans un update alors c'est comme si tu étais dans un trigger


Message édité par orafrance le 12-01-2006 à 14:40:22
Reply

Marsh Posté le 12-01-2006 à 15:30:20    

C'est sans doute "comme si" j'étais dans un trigger, mais le cas diffère dans le sens où certaines solutions ne sont applicables qu'aux triggers.
 
Le problème a finalement été résolu par une modification de schéma.
Merci !


Message édité par KrisCool le 12-01-2006 à 15:30:34

---------------
Loose Change Lies | Bars | Last.fm
Reply

Marsh Posté le 12-01-2006 à 15:35:05    

mais encore ?

Reply

Marsh Posté le 13-01-2006 à 11:05:15    

L'application concernée utilise des requêtes générées.
Dans le cas de certaines requêtes de type UPDATE, il n'est pas possible de générer automatiquement la requête si l'UPDATE accède à plusieurs tables différentes. Dans ce cas là, j'avais fait le choix de déporter une partie de l'update dans une fonction qui elle même accède aux différentes tables (à ce stade, c'est une restriction de notre génération de requêtes).
 
Sauf que, comme je l'ai expliqué plus haut, ça ne fonctionne pas, Oracle ne permet pas ce type de manipulation. Pour des questions d'intégrité on ne peut pas ignorer délibérément l'erreur.
 
Il a été choisi de faire une modification de schéma permettant que toutes les données requises par l'update proviennent de la même table, ce qui nous a permis d'exploiter notre génération de requêtes normalement, sans avoir à passer par une fonction tierce.


---------------
Loose Change Lies | Bars | Last.fm
Reply

Marsh Posté le 13-01-2006 à 12:21:59    

OK, merci :)

Reply

Sujets relatifs:

Leave a Replay

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