关注ORACLE ERP及开发工具
引用本人原创文章敬请注明出处
变异表问题
上一篇 /
下一篇 2007-03-02 00:00:00
/ 个人分类:Oracle 开发
有个需求,需要在基于A表的行级TRIGGER中更新B表某字段前先检查A表其他记录数,这会遇到变异表问题,由于更新A后又会触发更新B表,就在B表中执行上面的检查操作,结果发现多数情况可以执行过去,但少部分情况还是会有变异表问题发生,但重新操作又可以过,看起来这种方式有不确定性。环境为10g的DB.
解决的方法
1、按TOM提供的方式,在包中加公共变量,然后用表级trigger获取值,在行级trigger判断
2、用自治事务隔离操作。本例中采用后者较简单。在B表的行级before update中写一自治事务函数:
IF ... THENITPUB个人空间u!hab'y\9H
DECLARE
4C;LN`1?E!q0FUNCTION get_max_date(p_branch_no2 VARCHAR2) RETURN VARCHAR2 IS
7@q"VwU-X*y#Z-L0PRAGMA AUTONOMOUS_TRANSACTION;
C!P]iCb0v_end_date varchar2
BEGIN
......ITPUB个人空间dPk9\$L)Bw
ITPUB个人空间;mZ+vN
QU#K
IF ... THEN
/h/}*~r.tgjSW0RETURN(v_end_date);ITPUB个人空间Tyb.QgQ1z
ELSE
\e2`&lv
I8_9v@0RETURN(p_end_date);
-^*K.m&I-f5ah(u3g1sc]0END IF; ITPUB个人空间P|8pNhxIs?
END;
^ cMOOE
T0BEGIN
'rY3iDo0:NEW.end_date := get_max_date(:NEW.branch_no2);ITPUB个人空间+{j%jt)|8H"fsy ^%O|
END;ITPUB个人空间*k3^
a5f;M$HOk
END IF;
c%X6kj.^\'W.D0
导入论坛
引用链接
收藏
分享给好友
推荐到圈子
管理
举报
TAG: