CREATE OR REPLACE TRIGGER UPDATE_TEST_280510
AFTER insert on TEST_TRNCOMPVISIT
declare
V_TRNCOMPNO NUMBER(10);
CURSOR C1 IS SELECT B.COMPNO FROM TEST_TRNCOMPVISIT A, TEST_TRNCOMPMST B,
TEST_MEMMAST C
WHERE A.COMPNO=B.COMPNO
AND B.TRNMEMID=C.MEMID
AND C.MEMOS>=1000;
begin
open c1;
fetch c1 into V_TRNCOMPNO;
UPDATE TEST_TRNCOMPMST SET COMPSTATUS='P',
remark='comp is pending due to O/S>1000'
WHERE COMPNO=V_TRNCOMPNO AND COMPSTATUS='C';
CLOSE C1;
end;
我已经制作了这个触发器,当在表 TEST_TRNCOMPVISIT 中插入行时,它给出了以下错误 -
出现以下错误:
ORA-04091: 表 TEST.TEST_TRNCOMPVISIT 正在发生变化,触发器/函数可能看不到它
ORA-06512: 在“TEST.UPDATE_TEST_280510”,第 4 行
ORA-06512: 在“TEST.UPDATE_TEST_280510”,第 10 行
ORA-04088: 执行触发器“TEST.UPDATE_TEST_280510”期间出错
当定义为 FOR EACH ROW 的触发器尝试访问为其触发的表时,会引发“表正在发生变化”异常。 Tom Kyte 写了一篇关于此异常的原因和解决方案的精彩指南here.
在您发布的示例中,您没有 FOR EACH ROW,因此我不希望引发异常。通常,只有在需要访问每一行的 :OLD 或 :NEW 值(但您不需要)的情况下才需要使用 FOR EACH ROW 触发器。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)