Oracle 行级触发器的一个问题,恳请各位帮忙

beat30 2003-10-21 10:43:58
一个简单的触发器如下:

create or replace trigger test
after insert on tbl_test
for each row
begin
update test set status = '1' when test.id = :new.id;
end;

载编译的时候没有问题,但在运行
insert into tbl_test(id) values('1');
时总是出现 ORA-04091的错误。
ORA_4091的描述如下:
Cause: A trigger (or a user defined PL/SQL function that is referenced in this statement) attempted to look at (or modify) a table that was in the middle of being modified by the statement which fired it.

Action: Rewrite the trigger (or function) so it does not read that table.

现在的问题是,以前(大概一个月前),我们基于这个触发器的测试都是正确的。
所以,问题:
行级触发器中, after 情况下,能否进行对触发这个行级触发器的语句进行修改?
或者,在什么情况下是可以的。
希望各位能给你帮助,。
thanks advance.
...全文
37 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Lastdrop 2003-10-24
  • 打赏
  • 举报
回复
你把你的触发器的名字改一下,不要与表test重名。
KingSunSha 2003-10-24
  • 打赏
  • 举报
回复
这个错误通常只发生在触发器更新本身表的情况下,但是你的触发器中更新的是另外一个表。我猜想会会不会这个表上还有别的触发器也在更新test表?
prh 2003-10-21
  • 打赏
  • 举报
回复
你有没有尝试一下其他的语句做触发器呢?是一下把,如果还 有错误的话,可能 是你装oracle时有问题 ok
beckhambobo 2003-10-21
  • 打赏
  • 举报
回复
也不清楚,试试用before

3,492

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧