Oracle触发器给表自身的字段重新赋值出现ORA-04091异常

2014-11-24 17:51:50 · 作者: · 浏览: 0

业务描述如下:


表结构定义和触发器定义如下:


create table debug_demo1(
id varchar(32),
name varchar(100),
note varchar(200),
primary key(id)
);


create or replace trigger tri_debug_demo1
before insert on debug_demo1
for each row
begin
update debug_demo1 set note = 'test' where id = :new.id;
end tri_debug_demo1;


结果执行insert操作的时候,Oracle出现了ORA-04091异常


ORA-04091:表debug_demo1发生了变化 触发器/函数不能读它


ORA-06512: 在tri_debug_demo1 line...


ORA-04088: 触发器tri_debug_demo1 执行过程中出错


找到了新的方法,那就是给字段直接赋值


修改之后的触发器如下:


create or replace trigger tri_debug_demo1
before insert on debug_demo1
for each row
begin
:new.note := 'test';
end tri_debug_demo1;


经过测试,可以正常进行insert操作,也能达到预期。