这个触发器为什么总是出错?

xbm2002 2003-10-18 09:03:51
现在有表table ( a0 char(3),a1 char(3),a2 char(3),a3 number);
表中以 a0,a1,a2为关键字,现打算实现将a3值该为1时,要求实现所有与该记录的a0,a1字段相同的记录的a3的值全被修改为1,当a3的值被修改为0时,所有与之相同的记录字段被修改为0 写触发器如下:
create or replace trigger tri_table
after update of a3 on table
for each row
begin
if :new.a3=1 then
update table set a3=1 where a0=:old.a0 and a1=:old.a1;
elsif :new.a3=0 then
update table set a3=0 where a0=:old.a0 and a1=:old.a1;
end if;
end;
/
系统总是提示带有编译错误,而且当执行时,系统提示table 的表结构被更改,trigger无效
请问针对这种错误应该如何修改触发器语句(而不是创建一个视图,当然视图很有效)
谢谢!!!
...全文
112 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
xbm2002 2003-10-18
  • 打赏
  • 举报
回复
我打算在表中的一项被修改时,其他相关项同时被修改
难道真的就没有变通的方法了吗?
tsj68 2003-10-18
  • 打赏
  • 举报
回复
这样的触发器是不可以的,更改这个表又触发更改它本身,会造成死循环.
可以直接用update语句,例如:
sql>update table set a3=newvalue where a0=value_a1 and a1=value_a1;
xbm2002 2003-10-18
  • 打赏
  • 举报
回复
能否给出具体的代码,小弟初学谢谢!

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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