ora_04091 触发器不能读???

zsfww1205 2005-06-21 08:08:52
急,在线等,解决即给分!!!
触发器:
create or replace trigger zsf_py_cj_bj
after insert on py_cj
for each row
declare
stmt varchar2(200);
begin
stmt := 'update py_cj t set bj = (select bh from student t1 where t.xh = t1.xh ) ' ||
'where bj is null';
EXECUTE IMMEDIATE stmt;
end zsf_py_cj_bj;

执行:
insert into py_cj(xh,xm,kh,km,nj,xq,zydm)
values('042688','任倩倩','020000','zsf','04','2','100103')
语句时报错:
ORA-04091:表jwc.py_cj发生了变化,触发器/函数不能读

请高手指点!
...全文
99 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zsfww1205 2005-06-22
  • 打赏
  • 举报
回复
bobfang(匆匆过客) :
谢谢
但是如果是before的话,好像不会对当前插入的纪录补齐bj 阿
zhpsam109 2005-06-22
  • 打赏
  • 举报
回复
http://blog.csdn.net/zhpsam109/archive/2004/09/07/97335.aspx
bobfang 2005-06-22
  • 打赏
  • 举报
回复
把for each row去处掉。行级触发器不允许读触发的表,需要改为表级的触发器。如果你的逻辑是想对新插入的行自动补bj的值,可以改为
create or replace trigger zsf_py_cj_bj
before insert on py_cj
for each row
declare
stmt varchar2(200);
begin
select bh into :NEW.bj from student t1 where t.xh = t1.xh ;
end zsf_py_cj_bj;

17,377

社区成员

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

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