Veröffentlicht 29. September 2014
Aktualisiert October 2025
Einleitung
ORA-04091: Tabelle … wird gerade geändert, Trigger/Funktion sieht dies möglicherweise nicht.
Dieser Fehler tritt typischerweise auf, wenn ein Trigger oder eine Funktion versucht, auf eine Tabelle zuzugreifen oder sie zu ändern, während dieselbe Tabelle gerade von derselben DML-Anweisung (INSERT, UPDATE oder DELETE) verändert wird.

ORA-04091 Datenbankfehler- Tabelle wird gerade geändert
Warum dieser Fehler auftritt
In vielen praktischen Datenbankdesigns möchten Entwickler aggregierte oder zusammengefasste Daten in einer Mastertabelle pflegen.
Ein klassisches Beispiel: Eine Spalte AVERAGE_SALARY in der Tabelle DEPARTMENTS soll automatisch aktualisiert werden, sobald sich das Gehalt eines Mitarbeiters in der Tabelle EMPLOYEES ändert.
Wird dies über einen Row-Level-Trigger versucht, löst Oracle den Mutating Table Error aus, da der Trigger versucht, auf dieselbe Tabelle zuzugreifen, die gerade von der Anweisung verändert wird.

Ein UPDATE statement auf DEPARTMENTS wird im AFTER_DELETE-STMT-Trigger der Tabelle EMPLOYES ausgeführt
Verwendung des Mutating Table Trigger Wizards
Der Mutating Table Trigger Wizard in Hora vereinfacht dieses Problem erheblich, indem er automatisch einen Oracle Compound Trigger erzeugt.
Sie öffnen den Assistenten im Schema-Browser, indem Sie mit der rechten Maustaste auf eine Tabelle klicken und „Mutating Table Trigger Wizard“ auswählen.

Der Mutating Trigger Wizard wird über das Kontextmenü auf der Triggers-Seite geöffnet
Der Assistent erkennt automatisch die Beziehungen zwischen Master- und Detailtabellen und schlägt passende Standardwerte vor.
In unserem Beispiel haben wir den Triggernamen von EMPLOYEES_CM in UPDATE_AVERAGE_SALARY_CM geändert, die Aggregatfunktion (z. B. AVG) und die Spalte für die Aggregation (SALARY) ausgewählt.
Da die Tabelle EMPLOYEES mit mehreren Mastertabellen verknüpft ist, haben wir die richtige (DEPARTMENTS) ausgewählt.

Benutzung des Mutating Table Wizards – Auswahl der zu aggregierenden Spalte und des Foreign Keys zur Matsertabelle
Nach Bestätigung mit OK und aktiviertem SQL-Vorschaumodus generiert Hora automatisch den entsprechenden Compound Trigger.

Der vom Wizard erzeugte COMPOUND-Trigger
Aufbau des erzeugten Triggers
Der generierte Compound Trigger besteht aus mehreren Abschnitten:
-
Deklarationsabschnitt – definiert Variablen oder Collections, die während der Verarbeitung verwendet werden.
-
BEFORE EACH ROW – sammelt die betroffenen DEPARTMENT_ID-Werte, sobald Datensätze geändert werden.
-
AFTER STATEMENT – wird ausgeführt, nachdem alle Zeilen verarbeitet wurden. Hier werden die aggregierten Werte berechnet und die Mastertabelle aktualisiert.
Da die Aktualisierung der Mastertabelle erst nach Abschluss aller Detailänderungen erfolgt, tritt der Mutating-Table-Fehler nicht mehr auf.
Außerdem können Sie den generierten Code nach Bedarf erweitern, beispielsweise mit Debug-Ausgaben wie:
Zusammenfassung
Mit dem Mutating Table Trigger Wizard bietet KeepTool eine einfache und sichere Möglichkeit, den ORA-04091-Fehler zu vermeiden.
Der Assistent erzeugt automatisch einen voll funktionsfähigen Compound Trigger, der sicherstellt, dass Aktualisierungen in Mastertabellen erst nach Abschluss der Row-Level-Verarbeitung stattfinden.
Diese Funktion spart wertvolle Entwicklungszeit und verhindert zuverlässig Fehler bei DELETE-, UPDATE- und INSERT-Triggern in Oracle-Datenbanken.
➡️ KeepTool kostenlos testen
Die Oracle-Tools von KeepTool wurden speziell für Entwickler, DBAs und Support-Teams entwickelt.
Basierend auf über 25 Jahren Erfahrung optimieren wir unsere Software kontinuierlich, um Ihre Datenbankanalyse und -dokumentation schneller, effizienter und übersichtlicher zu gestalten.