创建触发器时,报错“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”

 

 

          

posted @ 2009-05-14 17:09  单康丽  阅读(683)  评论(0编辑  收藏  举报