Mutating Table Syndrom [Oracle8i]

Hallo,

hat Oracle die Restriktionen was Mutating Tables betrifft gelockert?!
Mein bisheriger Wissensstand war, das die MT in einem
ROW Trigger weder gelesen noch geändert werden darf.

Ich habe jedoch einen Trigger, der die MT liest. Beim
Insert funktioniert das völlig unerwartet -
beim update hingegen, wie erwartet, nicht (ORA-04091).

Hat jemand eine Erklärung dafür?

Gruß

Tom

Hallo,
hat Oracle die Restriktionen was Mutating Tables betrifft
gelockert?!

Warum sollten sie - keine Rowtrigger auf Mutating Table schützt schließlich von Inkonsistenzen.

Mein bisheriger Wissensstand war, das die MT in einem
ROW Trigger weder gelesen noch geändert werden darf.

Kein Lesen - JA (…und das ist auch gut so !), kein Schreiben - das glaube ich nicht.

Ich habe jedoch einen Trigger, der die MT liest. Beim
Insert funktioniert das völlig unerwartet -
beim update hingegen, wie erwartet, nicht (ORA-04091).

Hat jemand eine Erklärung dafür?

Vielleicht. Könnte es sein, dass das eine ein Statement- und das andere ein Rowtrigger ist ? Statementtrigger gehen nämlich problemlos durch.

Gruss der Janus

Hallo,
hat Oracle die Restriktionen was Mutating Tables betrifft
gelockert?!

Warum sollten sie - keine Rowtrigger auf Mutating Table
schützt schließlich von Inkonsistenzen.

Mein bisheriger Wissensstand war, das die MT in einem
ROW Trigger weder gelesen noch geändert werden darf.

Kein Lesen - JA (…und das ist auch gut so !), kein Schreiben

  • das glaube ich nicht.

Ich nehme an du verstehst unter Schreiben Zuweisungen der Form

new.col = ‚xyz‘, da Inserts und Updates auf die MT keinesfalls erlaubt sind.

Auszug aus dem Oracle8i ADG zum Thema Row-Level Trigger Restriktionen:
'The SQL statements of a trigger cannot read from (query) or modify
a mutating table of the triggering statement. ’

Ich habe jedoch einen Trigger, der die MT liest. Beim
Insert funktioniert das völlig unerwartet -
beim update hingegen, wie erwartet, nicht (ORA-04091).

Hat jemand eine Erklärung dafür?

Vielleicht. Könnte es sein, dass das eine ein Statement- und
das andere ein Rowtrigger ist ? Statementtrigger gehen nämlich
problemlos durch.

Es ist ein und der selbe Row-level Trigger mit folgendem Konstrukt:
IF INSERTING
THEN
SELECT col INTO myCol FROM mutating_table;

ELSIF UPDATING
THEN
SELECT col INTO myCol FROM mutating_table;

END IF;

Gruß

Tom