Oracle-A表a字段更新后,修改b字段的值,写了个触发器,执行报错ora-04091

触发器如下:CREATEORREPLACETRIGGERtrigger_XQCSAFTERupdateonhi_psndoc_ctrtforeachrowbeginupd... 触发器如下:

CREATE OR REPLACE TRIGGER trigger_XQCS
AFTER update on hi_psndoc_ctrt
for each row

begin
update hi_psndoc_ctrt
set glbdef1 = (select count(conttype)
from hi_psndoc_ctrt
where conttype = 2);

end;

update hi_psndoc_ctrt set conttype = '2' where PK_PSNDOC_SUB = '1002T810000000000RIK';
报错
ORA-04091: 表 USER0923.HI_PSNDOC_CTRT 发生了变化, 触发器/函数不能读它
ORA-06512: 在 "USER0923.TRIGGER_XQCS", line 2
ORA-04088: 触发器 'USER0923.TRIGGER_XQCS' 执行过程中出错
展开
 我来答
longrenyingdc8ecb1
推荐于2016-02-05 · TA获得超过1万个赞
知道大有可为答主
回答量:6032
采纳率:82%
帮助的人:2349万
展开全部
肯定不行,修改A字段时update语句没提交的时候,是有锁的,自然不可能通过触发器读取相同的行了。
如果修改是有顺序的,那么个人认为这个要写的不是触发器而是一个过程,而不是触发器。
每次修改该该表就是调用这个过程(你要做的就是传进要修改的参数),这个过程前面是update那个conttype,提交后,再update字段glbdef1。这样有一个先后顺序,就会好一些。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式