gpt4 book ai didi

sql - 变异,触发器/函数可能看不到它-触发器执行期间的错误

转载 作者:行者123 更新时间:2023-12-01 01:34:10 27 4
gpt4 key购买 nike

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: table TEST.TEST_TRNCOMPVISIT is mutating, trigger/function may not see it
ORA-06512: at "TEST.UPDATE_TEST_280510", line 4
ORA-06512: at "TEST.UPDATE_TEST_280510", line 10
ORA-04088: error during execution of trigger 'TEST.UPDATE_TEST_280510'

最佳答案

当定义为 FOR EACH ROW 的触发器尝试访问为其触发的表时,会引发“表正在改变”异常。 Tom Kyte 撰写了有关此异常的原因和解决方法的出色指南 here .

在您发布的示例中,您没有 FOR EACH ROW,因此我不希望引发异常。通常只有在需要访问每一行的 :OLD 或 :NEW 值的情况下才需要使用 FOR EACH ROW 触发器,而您不需要。

关于sql - 变异,触发器/函数可能看不到它-触发器执行期间的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2996748/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com