【发布时间】:2021-05-07 14:18:50
【问题描述】:
我有一个 oracle 触发器来将数据插入另一个表。如果我使用单个更新查询而不是它,但是如果我使用多个命令(如更新和插入)它会失败并出现以下错误。
ORA-04091: table ADMIN_SMS_HANDLER is mutating, trigger/function may not see it
ORA-06512: at "ADMIN_SMS_TRIG", line 16
ORA-04088: error during execution of trigger 'ADMIN_SMS_TRIG'
这行得通。
CREATE OR REPLACE TRIGGER ADMIN_SMS_TRIG AFTER
INSERT ON ADMIN_SMS_HANDLER
FOR EACH ROW
DECLARE BEGIN
INSERT INTO SMS (
SMSID,
ANUMBER,
BNUMBER,
MSG,
APP
) VALUES (
SMSSEQ.NEXTVAL,
:NEW.SMS_FROM,
:NEW.SMS_TO,
:NEW.SMS_TEXT,
'APP'
);
END;
但这不起作用
CREATE OR REPLACE TRIGGER ADMIN_SMS_TRIG AFTER
INSERT ON ADMIN_SMS_HANDLER
FOR EACH ROW
DECLARE BEGIN
INSERT INTO SMS (
SMSID,
ANUMBER,
BNUMBER,
MSG,
APP
) VALUES (
SMSSEQ.NEXTVAL,
:NEW.SMS_FROM,
:NEW.SMS_TO,
:NEW.SMS_TEXT,
'app'
);
UPDATE ADMIN_SMS_HANDLER
SET
SENT_DATE = SYSDATE,
SENT_STATUS = 1,
UPDATED_BY = 'trigger',
UPDATED_DATE = SYSDATE
WHERE
ID = :NEW.ID;
END;
【问题讨论】:
-
因为您正在尝试更新创建触发器的表。
ADMIN_SMS_HANDLER。您是否尝试过插入前触发器?