变异表问题

有个需求,需要在基于A表的行级TRIGGER中更新B表某字段前先检查A表其他记录数,这会遇到变异表问题,由于更新A后又会触发更新B表,就在B表中执行上面的检查操作,结果发现多数情况可以执行过去,但少部分情况还是会有变异表问题发生,但重新操作又可以过,看起来这种方式有不确定性。环境为10g的DB.

解决的方法

1、按TOM提供的方式,在包中加公共变量,然后用表级trigger获取值,在行级trigger判断

2、用自治事务隔离操作。本例中采用后者较简单。在B表的行级before update中写一自治事务函数:

IF ... THEN
DECLARE
FUNCTION get_max_date(p_branch_no2 VARCHAR2) RETURN VARCHAR2 IS
PRAGMA AUTONOMOUS_TRANSACTION;
v_end_date varchar2

BEGIN

......

IF ... THEN
RETURN(v_end_date);
ELSE
RETURN(p_end_date);
END IF;
END;
BEGIN
:NEW.end_date := get_max_date(:NEW.branch_no2);
END;
END IF;


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8118583/viewspace-64851/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/8118583/viewspace-64851/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值