小弟自己写的触发器,请问错在那里?

zhp_dean 2004-07-12 12:34:49
表结构:
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
ID NOT NULL NUMBER(8)
NAME NOT NULL CHAR(16)
SEX CHAR(4)
AGE NUMBER(3)
ADDRESS CHAR(40)
TELPHONE CHAR(16)
HOBBY CHAR(100)

触发器:
create or replace trigger uee
after insert or update on employee
for each row
begin
update employee set age=age+10;
end uee;

执行语句:
update employee set name='jack' where id = 0007;

错误提示:
update employee set name='jack' where id = 0007
*
ERROR 位于第 1 行:
ORA-04091: 表 SYSTEM.EMPLOYEE 发生了变化,触发器/函数不能读
ORA-06512: 在"SYSTEM.UEE", line 2
ORA-04088: 触发器 'SYSTEM.UEE' 执行过程中出错


请问错在哪里呢?应该怎样改才对呢?
...全文
107 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
beckhambobo 2004-07-14
  • 打赏
  • 举报
回复
create or replace trigger uee
after insert or update on employee
for each row
begin
:new.age:=:new.age+10;
end uee;
/
hopes_chen 2004-07-14
  • 打赏
  • 举报
回复
trigger不可以異動臟表(或異動表)的數據!!!
trigger所依附的表即為臟表!!!!
beckhambobo 2004-07-14
  • 打赏
  • 举报
回复
create or replace trigger uee
after insert or update on employee
for each row
begin
:new.age=:new.age+10;
end uee;
zhwind 2004-07-14
  • 打赏
  • 举报
回复
学习一下!
bzszp 2004-07-12
  • 打赏
  • 举报
回复
对于行级触发器不能对触发的表进行这种update操作,可以通过包来解决
具体实例查阅oracle文档中关于ORA-04091错误的内容
yanger8689 2004-07-12
  • 打赏
  • 举报
回复
update employee set age=age+10;
改为
update employee set age=new.age+10;
dinya2003 2004-07-12
  • 打赏
  • 举报
回复
ORA-04091 table string.string is mutating, trigger/function may not see it

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.

这是错误信息和原因及解决办法.
你的触发器是在更新表后触发.可以把你的需求说一下.大家帮你改一下.

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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