我有一个更好地解释这种情况的例子。我有桌子A
CREATE TABLE A( ID NUMBER, VAL NVARCHAR2(255) )
然后创建一个触发器,对它刚插入的行进行更新
CREATE OR REPLACE TRIGGER XXX
AFTER INSERT
ON A
FOR EACH ROW
DECLARE
BEGIN
UPDATE A SET VAL = 'LOL' WHERE ID = :NEW.ID;
END;
当我执行插入
INSERT INTO A VALUES(1, 'XX')
我懂了
ORA-04091: table name is mutating, trigger/function may not see it
有解决方法吗?
您不需要更新,只需在BEFORE
触发器中分配新值即可。
CREATE OR REPLACE TRIGGER XXX
BEFORE INSERT --<< You need a BEFORE trigger for this to work.
ON A
FOR EACH ROW
BEGIN
:new.val := 'LOL';
END;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句