Reputation: 433
I have created trigger to insert data into another table based on entry from another table. The trigger is created but after entering value in the table, below error is received.
ORA-04091: table OOMUSER.EMTN_EVC_PAIR_STATUS is mutating, trigger/function may not see it
ORA-06512: at "OOMUSER.PORTSTATUSUPDATE", line 22
ORA-04088: error during execution of trigger 'OOMUSER.PORTSTATUSUPDATE'
DROP TRIGGER OOMUSER.PORTSTATUSUPDATE;
CREATE OR REPLACE TRIGGER OOMUSER.PORTSTATUSUPDATE
AFTER INSERT
ON OOMUSER.EMTN_EVC_PAIR_STATUS FOR EACH ROW
DECLARE
LEGA VARCHAR2(20);
LEGB VARCHAR2(20);
ACTIVEPAIRA NUMBER;
ACTIVEPAIRB NUMBER;
BEGIN
SELECT EELA.CPE_PORT_SERVICE_ID INTO LEGA FROM EMTN_EVC_LEG_A EELA WHERE EELA.EMTN_EVC_PAIRID = :NEW.EMTN_EVC_PAIRID;
SELECT EELB.CPE_PORT_SERVICE_ID INTO LEGB FROM EMTN_EVC_LEG_B EELB WHERE EELB.EMTN_EVC_PAIRID = :NEW.EMTN_EVC_PAIRID;
IF (:NEW.STATUS = 'Active' OR :NEW.STATUS = 'Planned')
THEN
INSERT INTO OOMUSER.EMTN_ETN_CPE_PORT_STATUS
(CPE_PORT_SERVICE_ID,STATUS,STATUS_START_DATETIME)
VALUES(LEGA,:NEW.STATUS,SYSDATE);
INSERT INTO OOMUSER.EMTN_ETN_CPE_PORT_STATUS
(CPE_PORT_SERVICE_ID,STATUS,STATUS_START_DATETIME)
VALUES(LEGB,:NEW.STATUS,SYSDATE);
ELSIF(:NEW.STATUS = 'Rejected' OR :NEW.STATUS = 'Cancelled')
THEN
SELECT COUNT(OVEDS.EMTN_EVC_PAIRID) INTO ACTIVEPAIRA FROM OOM_VW_EMTN_DUALEVC_STATUS OVEDS WHERE OVEDS.EMTN_EVC_PAIRID IN
(
SELECT EELA.EMTN_EVC_PAIRID FROM EMTN_EVC_LEG_A EELA WHERE EELA.CPE_PORT_SERVICE_ID =
(
SELECT EELA.CPE_PORT_SERVICE_ID FROM EMTN_EVC_LEG_A EELA WHERE EELA.EMTN_EVC_PAIRID = :NEW.EMTN_EVC_PAIRID
)
) AND UPPER(OVEDS.STATUS) IN ('ACTIVE','PLANNED');
IF(ACTIVEPAIRA = 0)
THEN
INSERT INTO OOMUSER.EMTN_ETN_CPE_PORT_STATUS
(CPE_PORT_SERVICE_ID,STATUS,STATUS_START_DATETIME)
VALUES(LEGA,:NEW.STATUS,SYSDATE);
END IF;
SELECT COUNT(OVEDS.EMTN_EVC_PAIRID) INTO ACTIVEPAIRB FROM OOM_VW_EMTN_DUALEVC_STATUS OVEDS WHERE OVEDS.EMTN_EVC_PAIRID IN
(
SELECT EELB.EMTN_EVC_PAIRID FROM EMTN_EVC_LEG_B EELB WHERE EELB.CPE_PORT_SERVICE_ID =
(
SELECT EELB.CPE_PORT_SERVICE_ID FROM EMTN_EVC_LEG_B EELB WHERE EELB.EMTN_EVC_PAIRID = :NEW.EMTN_EVC_PAIRID
)
) AND UPPER(OVEDS.STATUS) IN ('ACTIVE','PLANNED');
IF(ACTIVEPAIRB = 0)
THEN
INSERT INTO OOMUSER.EMTN_ETN_CPE_PORT_STATUS
(CPE_PORT_SERVICE_ID,STATUS,STATUS_START_DATETIME)
VALUES(LEGB,:NEW.STATUS,SYSDATE);
END IF;
END IF;
END;
/
Upvotes: 0
Views: 221
Reputation: 146349
Your error message ayss that line 22 is the problem:
ORA-06512: at "OOMUSER.PORTSTATUSUPDATE", line 22
Figuring out the line numbers of Trigger Body source code is not a precise science, especially when it has been pasted into StackOverflow, but it seems plausible that line 22
indicates this line as the trouble:
SELECT COUNT(OVEDS.EMTN_EVC_PAIRID) INTO ACTIVEPAIRB FROM OOM_VW_EMTN_DUALEVC_STATUS OVEDS WHERE OVEDS.EMTN_EVC_PAIRID
Is OOM_VW_EMTN_DUALEVC_STATUS
a view, by any chance? If so, what tables does it depend on? My guess is EMTN_EVC_PAIR_STATUS
features in there.
Upvotes: 1