2016-09-02 2 views
0

Ich schrieb einen DB-Trigger, um eine Einfügeaktion zu überwachen. Nach dem Einfügen eines neuen Datensatzes möchte ich automatisch CREATION_DATE auf sysdate setzen.Wie löst man den Oracle DB Triggerfehler?

Ich erhalte eine Fehlermeldung, wenn ich einen neuen Datensatz eingefügt werden soll:

Fehler
ORA-04091: Tabelle REPORT mutiert, Trigger/Funktion kann nicht sieht es
ORA-06512: bei "CREATION_DATE_TEST", Zeile 2
ORA-04088: Fehler bei der Ausführung der Trigger 'CREATION_DATE_TEST'

My-Code:

CREATE OR REPLACE TRIGGER creation_date_test 
AFTER INSERT ON REPORT FOR EACH ROW 
BEGIN 
    UPDATE REPORT set CREATION_DATE = sysdate 
    WHERE ROWID = :new.ROWID; 
END; 

Ich habe auch versucht, ROWID = :new.ROWID durch PROJECT_ID = new.PROJECT_ID zu ersetzen. Es löst denselben Fehler aus.

Antwort

3

Es klingt wie Sie nur vor Insert-Trigger wollen, dass die :new.creation_date

create or replace trigger creation_date_test 
    before insert on report 
    for each row 
begin 
    :new.creation_date := sysdate; 
end; 
+0

Dank soviel setzt! Ihre Antwort ist wirklich hilfreich !! –

+0

@deli - Ist 'creation_date' ein' varchar2' anstatt ein 'date', wie der Name implizieren würde? Ich würde nicht erwarten, dass in dem von mir geposteten Code irgendwelche Strings verwendet werden. –

+0

Ich habe den Datentyp jetzt geändert. Vielen Dank !! –