【发布时间】:2017-01-21 19:29:26
【问题描述】:
我在运行 Trigger 时遇到问题。它编译成功,没有错误,但是在尝试运行它时,它会抛出一个错误ORA-04091 table is mutating。当向表中添加新记录(ATTD_DETAILS)时,我实际上是在尝试在表中插入一行(ATTDETAIL)。
并且必须用新格式替换EADEMPID。
触发器
CREATE OR REPLACE TRIGGER ATTENDANCE
AFTER INSERT ON ATTD_DETAILS
FOR EACH ROW
DECLARE
EMCODE VARCHAR2(50) := 'NA';
BEGIN
SELECT CASE
WHEN EAD.EADEMPID LIKE 'A%' THEN
'1V' || EADEMPID
WHEN EAD.EADEMPID LIKE 'C%' THEN
'LM' || EADEMPID
WHEN EAD.EADEMPID LIKE 'S%' THEN
'LM' || EADEMPID
ELSE EAD.EADEMPID
END INTO EMCODE
FROM ATTD_DETAILS EAD
WHERE EAD.EADEMPID = :NEW.EADEMPID;
IF (:NEW.EADREMARKS = 'Successful' OR :NEW.EADREMARKS = 'SUCCESSFUL') THEN
INSERT INTO ATTDETAIL
(CODE,
CARDID,
ATT_DATE,
ATT_TIME,
EMPID,
PROCODE)
VALUES
(:NEW.EADSITECODE,
:NEW.EADEMCARDID,
:NEW.EADATT_DATE,
:NEW.EADATT_TIME,
EMCODE,
'880');
END IF;
END;
【问题讨论】: