【发布时间】:2018-03-25 04:34:12
【问题描述】:
我刚开始学习触发器。我想制作一个触发器,在插入测试后给用户一个“插入成功”的通知。
这是我的代码。
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 的简单搜索会返回数百个匹配项。
-
感谢您的回复。我原代码的问题大概和mutating table question一样。
标签: oracle