我剛開始學習觸發器。我想在插入測試後給用戶一個通知'插入成功'。插入後oracle觸發器打印
這是我的代碼。
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');
而我得到的錯誤是這樣的:
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'
任何人都可以指出錯誤,並告訴我如何修改密碼?
對不起,我沒有注意到有很多簡單的錯誤,使查詢無法運行。我的原始代碼在觸發器中聲明變量,但我沒有發佈它。我想這可能就是我錯誤變異的原因。
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;
/
發佈的代碼中沒有任何內容會導致觸發器發生變異。顯然,這不是你正在運行的代碼,所以重要的是什麼?這個網站上的突變表問題相當普遍。對ORA-04091的簡單搜索可以返回數百個匹配結果。 – APC
感謝您的回覆。我的原始代碼的問題可能與變異表問題相同。 – yufeng