【发布时间】:2015-06-11 22:52:38
【问题描述】:
对不起我的英语。
我有 2 张桌子:
Table1
id
table2_id
num
modification_date
和
Table2
id
table2num
我想创建一个触发器,在 Table1 中插入或删除后更新 Table2.table1lastnum 中的最后一个值 num。
我的触发器:
CREATE OR REPLACE TRIGGER TABLE1_NUM_TRG
AFTER INSERT OR DELETE ON table1
FOR EACH ROW
BEGIN
IF INSERTING then
UPDATE table2
SET table2num = :new.num
WHERE table2.id = :new.table2_id;
ELSE
UPDATE table2
SET table2num = (SELECT num FROM (SELECT num FROM table1 WHERE table2_id = :old.table2_id ORDER BY modification_date DESC) WHERE ROWNUM <= 1)
WHERE table2.id = :old.table2_id;
END IF;
END TABLE1_NUM_TRG;
但在Table1 中删除后出现错误:
ORA-04091: table BD.TABLE1 is mutating, trigger/function may not see it
ORA-06512: at "BD.TABLE1_NUM_TRG", line 11
ORA-04088: error during execution of trigger 'BD.TABLE1_NUM_TRG'
我做错了什么?
【问题讨论】:
-
您正尝试在您正在
DELETE一行的表上运行SELECT语句。 -
Google 错误代码 ORA-04091,你会得到很多答案。