Die Lösung ist ein After-Statement-Trigger. Diese Trigger unterliegen nicht der MT-Beschränckung.
Code:
SQL> create table t (id number); Tabelle wurde erstellt. SQL> create or replace trigger trg_t after update on t 2 for each row 3 declare 4 x number; 5 begin 6 select count(*) into x from t; 7 end; 8 / Trigger wurde erstellt. SQL> insert into t values(123); 1 Zeile wurde erstellt. SQL> insert into t values(456); 1 Zeile wurde erstellt. SQL> commit; Transaktion mit COMMIT abgeschlossen. SQL> update t set id=3; update t set id=3 * FEHLER in Zeile 1: ORA-04091: Tabelle DIMITRI.T wird gerade geändert, Trigger/Funktion sieht dies möglicherweise nicht ORA-06512: in "DIMITRI.TRG_T", Zeile 4 ORA-04088: Fehler bei der Ausführung von Trigger 'DIMITRI.TRG_T'
Leider gestatten sie keinen Zugriff mehr auf die :NEW und :OLD
Code:
SQL> create or replace trigger trg_t after update on t 2 for each row 3 declare 4 x number; 5 y number; 6 begin 7 dbms_output.put_line('old='||:old.id); 8 dbms_output.put_line('new='||:new.id); 9 --select count(*) into x from t; 10 end; 11 / Trigger wurde erstellt. SQL> set serveroutput on SQL> update t set id=3; old=123 new=3 old=456 new=3 2 Zeilen wurden aktualisiert.
Multiuser Betrieb ist hier übrigends auch noch nicht berücksichtigt.
Dim
[EDIT]Ok mein Fehler. Du hast von einem Statement Trigger gesprochen. Allerdings ist ein Statement Trigger generell nicht von MT betroffen. Egal ob BEFORE oder AFTER[/EDIT]
Comment