Oracle
 sql >> Datenbank >  >> RDS >> Oracle

ORACLE After-Update-Trigger:Behebung des Fehlers ORA-04091 Mutating Table

"Gibt es eine Möglichkeit, den Mutationstabellenfehler zu vermeiden, ohne eine temporäre Tabelle für Werte oder eine autonome Transaktion zu verwenden?"

tl;dr nein.

Der Mutationstabellenfehler wird durch Abfragen der Tabelle verursacht, die den Trigger besitzt, oder von Tabellen, die an einer Fremdschlüsselbeziehung mit der besitzenden Tabelle beteiligt sind (zumindest in älteren Versionen der Datenbank, nicht sicher, ob sie noch vorhanden ist).

In einer richtig entworfenen Anwendung sollte dies nicht notwendig sein. Aus diesem Grund betrachten viele Menschen sich ändernde Tabellen als Indikator für eine schlechte Datenmodellierung. Beispielsweise ist eine Mutation oft mit einer unzureichenden Normalisierung verbunden.

Um Jamie Zawinski zu paraphrasieren:Einige Leute denken, wenn sie mit einer mutierenden Tabellenausnahme konfrontiert werden, "Ich weiß, ich werde autonome Transaktionen verwenden." Jetzt haben sie zwei Probleme.

Manchmal kann der Fehler vermieden werden, indem einfach die :NEW-Werte in einem BEFORE INSERT OR UPDATE-Trigger geändert oder virtuelle Spalten verwendet werden. Sie müssen jedoch weitere Details posten, um zu sehen, ob diese zutreffen.

Aber die beste Problemumgehung besteht darin, keine andere Art zu benötigen.