Téléchargé 1 fois
Vote des utilisateurs
0
2
Détails
Licence : Non renseignée
Mise en ligne le 25 janvier 2017
Langue : Français
Référencé dans
Navigation
Triggers; ORA-04091: la table est en mutation ; le déclencheur ou la fonction ne peut la voir
Triggers; ORA-04091: la table est en mutation ; le déclencheur ou la fonction ne peut la voir
ORA-04091 triggers table mutation
Nos ressources disponibles
Bonjour,
Lors de la création d'un trigger pour faire un update (ou autres) sur la même table, Oracle sort une erreur sur la table en mutation.
Pour la contourner, il faut une transaction autonome:
CREATE OR REPLACE TRIGGER triggerTable
AFTER UPDATE
OF cd_etat_mob
ON table_agent REFERENCING NEW AS New OLD AS Old
DECLARE
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
-- Votre UPDATE
-- Transaction autonome, un commit obligatoire
COMMIT;
END triggerTable;
/
Ceux-ci est ma petite contribution à la communauté, j'espère que cela aidera aux autres.
Lors de la création d'un trigger pour faire un update (ou autres) sur la même table, Oracle sort une erreur sur la table en mutation.
Pour la contourner, il faut une transaction autonome:
CREATE OR REPLACE TRIGGER triggerTable
AFTER UPDATE
OF cd_etat_mob
ON table_agent REFERENCING NEW AS New OLD AS Old
DECLARE
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
-- Votre UPDATE
-- Transaction autonome, un commit obligatoire
COMMIT;
END triggerTable;
/
Ceux-ci est ma petite contribution à la communauté, j'espère que cela aidera aux autres.
Triggers consider harmfull, consider harmfull un "must" pour quiconque veut bien comprendre le problème de la table en mutation!
Il faut trouver un compromis, d'où la méthode de "PRAGMA AUTONOMOUS_TRANSACTION".
Oui, c'est une solution de contournement, elle n'est pas dans les règles de l'art. Mais elle a le mérite d'être simple et compréhensive pour les novices.
Les vraies solution sont proposées par developpez.com. J'ai proposé à l'entreprise la solution de la "Méthode des deux déclencheurs" qui (selon moi) est la plus facile à comprendre.
Malgré cela, les décideurs la trouvent trop compliqués. Changé le modèle de la base, ne pensez même pas.
Les décideurs ont raisons. Ils ont pensé aux futurs développeurs (débutants) qui n'ont peut être pas les compétences nécessaires.
Passer trop de temps sur un trigger n'est pas rentable pour la société.
Il faut trouver un compromis, d'où la méthode de "PRAGMA AUTONOMOUS_TRANSACTION".
Merci pour vos remarques, ils aident beaucoup aux développeurs et pour la communauté developpez.com (comme pour moi).
Les vraies solution sont proposées par developpez.com. J'ai proposé à l'entreprise la solution de la "Méthode des deux déclencheurs" qui (selon moi) est la plus facile à comprendre.
Malgré cela, les décideurs la trouvent trop compliqués. Changé le modèle de la base, ne pensez même pas.
Les décideurs ont raisons. Ils ont pensé aux futurs développeurs (débutants) qui n'ont peut être pas les compétences nécessaires.
Passer trop de temps sur un trigger n'est pas rentable pour la société.
Il faut trouver un compromis, d'où la méthode de "PRAGMA AUTONOMOUS_TRANSACTION".
Merci pour vos remarques, ils aident beaucoup aux développeurs et pour la communauté developpez.com (comme pour moi).
Merci mnitu, je prends note.
Bonjour,
Je vous propose un nouvel élément à utiliser : Triggers; ORA-04091: la table est en mutation ; le déclencheur ou la fonction ne peut la voir
ORA-04091 triggers table mutation
Qu'en pensez-vous ?
Je vous propose un nouvel élément à utiliser : Triggers; ORA-04091: la table est en mutation ; le déclencheur ou la fonction ne peut la voir
ORA-04091 triggers table mutation
Qu'en pensez-vous ?
Developpez.com décline toute responsabilité quant à l'utilisation des différents éléments téléchargés.