Ich habe gerade angefangen zu lernen, Trigger. Und ich möchte einen Trigger machen, der nach dem Einfügen in den Test den Hinweis "erfolgreich einfügen" gibt.Orakel-Trigger-Druck nach dem Einfügen
Hier ist mein Code.
create table test (id number, name varchar2(30));
create trigger tr_test
after insert on test
for each row
begin
dbms_output.put_line('insert successfully');
end;
/
insert into test values(1, 'john');
Und ich bekomme die Fehlermeldung wie folgt aus:
ERROR at line 1:
ORA-04091: table YUFENG.TEST is mutating, trigger/function may not see it
ORA-06512: at "YUFENG.TR_TEST", line 3
ORA-04088: error during execution of trigger 'YUFENG.TR_TEST'
Könnte jemand den Fehler hinweisen und sagen Sie mir, wie Sie den Code ändern?
Sorry, dass ich nicht feststellen, dass es viele einfache Fehler, die die Abfrage nicht in der Lage zu laufen macht. Und mein ursprünglicher Code deklariert Variable im Trigger, aber ich habe sie nicht gepostet. Ich denke, wahrscheinlich ist das der Grund, warum ich den Fehler mutiere.
CREATE or REPLACE TRIGGER TR_TEST
AFTER INSERT ON TEST
FOR EACH ROW
DECLARE a VARCHAR2(30);
BEGIN
SELECT ID INTO a FROM TEST WHERE ID=:NEW.ID;
DBMS_OUTPUT.PUT_LINE('insert successfully');
END;
/
Es gibt nichts im geposteten Code, der dazu führen würde, dass der Auslöser mutiert. Klar, das ist nicht der Code, den du führst. Worum geht es also? Muting-Tabelle Fragen sind ziemlich häufig auf dieser Website. Eine einfache Suche nach ORA-04091 ergibt buchstäblich Hunderte von Treffern. – APC
Vielen Dank für die Antwort. Das Problem meines ursprünglichen Codes ist wahrscheinlich dasselbe wie eine mutierende Tabellenfrage. – yufeng