orcle 触发器问题! 急(100)

  • 主题发起人 主题发起人 xnnfan
  • 开始时间 开始时间
X

xnnfan

Unregistered / Unconfirmed
GUEST, unregistred user!
create or replace trigger GJJB_JeiBShiJafter update on GZJJB_JiaoJQKfor each rowdeclare kssj varchar2(19);begin If updating('JIAOBSJ') then select substr(jiaobrgzsj,23,19) into kssj From GZJJB_JIAOJQK where ID=:old.ID and jiaobrxm=:old.jiaobrxm; If :new.jiaobsj>kssj then update GZJJB_JiaoJQK set JieBSJ=:new.jiaobsj,JJBJ=1 where ID=:old.ID and jiaobrxm=:old.jiaobrxm and jiebrxm=:old.jiebrxm; Else update GZJJB_JiaoJQK set JieBSJ=kssj,JJBJ=1 where ID=:old.ID and jiaobrxm=:old.jiaobrxm and jiebrxm=:old.jiebrxm; end if; end GZJJB_JeiBShiJ;以上触发器可以通编译,但在运行过程中总是出错,如 line 8 或 line 10 等等!不知为什么?请大家帮帮忙!急
 
有可能是 Key的约束!~不知道,猜的!~
 
没有 约束
 
既然出错,肯定有出错信息的把出错信息贴出来。
 
出错提示:ORA-04091: table GZJJB_JIAOJQK is mutating,trigger/function may not see itORA-06512: at "GZJJB_JEIBSHIJ",line 5ORA-04088; error during execution of trigger 'GZJJB_JEIBSHIJ' 其中 line 后的数字不定
 
这个是著名的变异表问题,就是不能在触发器里面更新自己的表,解决办法有多个,你查一下资料,可以参考一下:http://blog.oracle.com.cn/html/58/t-120858.html
 
xianjun 你好,看过你发的网址,我也明白是怎么回事了。我之前也试过将触发器中的核心语句移至存储过程中,但不知为什么,在编译触发器中出错。create or replace trigger GJJB_JeiBShiJafter update on GZJJB_JiaoJQKfor each rowdeclare kssj varchar2(19);begin If updating('JIAOBSJ') then begin PGZJJB_JeiBShiJ(...); end; end if; 出错标示 : PGZJJB_JeiBShiJ无效。 但确定是定义过了。因为以前都是用SQL Server,不知orcle 中的语法和规则与SQL server中的相差这么大 :(end GZJJB_JeiBShiJ;
 
放到存储过程中,你是想用独立事务吧,要注意独立事务就是说不管修改表的SQL执行后有没有提交,你这个存储过程写的信息都会保存下来的。你这样调用,应该是 create or replace procedure PGZJJB_JeiBShiJ .... 这样创建的过程,如果是function或package则不能这样调用。
 
xianjun你好。感觉你懂得好多哦。上面说的,后来我也在网上看到了一些。不过还是很感谢。分分了我的QQ:498591300不知xianjun是否愿意收我做学生呢。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
490
import
I
I
回复
0
查看
637
import
I
I
回复
0
查看
3K
import
I
后退
顶部