ORA-04091:使用触发器中的光标插入其他表时表正在变异

时间:2018-11-20 03:47:53

标签: oracle triggers

create table dept(dno number(3) primary key)
create table emp(eno number(3) primary key,dno number(3) references dept)
create table emp_cnt(dno number(3),cnt number(3),foreign key(dno) references dept)

insert all
into dept values(101)
into dept values(102)
into dept values(103)
into dept values(104)
into dept values(105)
select * from dual

create or replace trigger count_emp after insert or update or delete on emp for each row
declare
cursor c1 is select dno,count(eno) cnt from emp group by dno;
begin
for row in c1
loop
insert into emp_cnt(dno,cnt) values(row.dno,row.cnt);
end loop;
end;

insert into emp values(1,101)

当我尝试像上面的语句一样在'emp'表中插入数据时,它显示了一个错误,告诉我'emp'表正在变异。下面我显示了它显示的确切错误

ORA-04091: table SYSTEM.EMP is mutating, trigger/function may not see it
ORA-06512: at "SYSTEM.COUNT_EMP", line 2
ORA-06512: at "SYSTEM.COUNT_EMP", line 4
ORA-04088: error during execution of trigger 'SYSTEM.COUNT_EMP'
1. insert into emp values(1,101)

最后插入的是我要插入的'emp'表,该表将调用触发器'emp_count',在此触发器中,我使用游标计算每个部门的员工人数,然后插入“ emp_cnt”表中光标的数据

1 个答案:

答案 0 :(得分:0)

如注释中所述,您不能查询或修改作为触发器所有者的表,否则会导致错误。

触发器不满足此类要求。请改用String stringBase64 = Convert.ToBase64String(bytes); byte[] imageBytes = Convert.FromBase64String(stringBase64); Image image = Image.FromStream(() => new MemoryStream(imageBytes)); return image;

View

Demo