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

触发器如下:

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' 执行过程中出错

肯定不行,修改A字段时update语句没提交的时候,是有锁的,自然不可能通过触发器读取相同的行了。
如果修改是有顺序的,那么个人认为这个要写的不是触发器而是一个过程,而不是触发器。
每次修改该该表就是调用这个过程(你要做的就是传进要修改的参数),这个过程前面是update那个conttype,提交后,再update字段glbdef1。这样有一个先后顺序,就会好一些。
温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答