创建触发器时,报错“ora-04091:函数/触发器 不可读”
SQL>create or replace trigger tri_row
2 after delete on student2
3 for each row
4 declare
5 v3 number;
6 begin
7 select count(*) into v3 from student2;
8 end;
9 /
删除表student2的内容,点燃触发器
SQL> delete from student2 where id=11;
Error: ora-04901: student2,触发器/函数 不可读
【原因】
触发器所依附的那张表为“动态表”(即此处的student2),我们在上面创建触发器。
“动态表”有一些限制,不允许触发器的主体对“动态表”进行查询或修改。但是,这种限制之应用于行级触发器。
在本例中,我们对动态表student2进行了查询。
【解决方法】
方法一:去掉对“动态表”进行查询/修改语句
去掉“select count(*) into v3 from student2”
方法二:把触发器由行级触发器改成语句级触发器
去掉“for each row”