오라클 오류 질문드립니다. (ORA-04098) 0 3 11,778

by 개발뉴비 트리거 오류 ORA-04098 [2014.08.26 11:18:13]


================ SCRIPT ==================

CREATE OR REPLACE TRIGGER A.TR_IF_ER_MNFEZ
BEFORE INSERT
ON B.IF_ER_MNFEZ
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
DECLARE

P_MNFCD     VARCHAR2(5);
P_ITEMFLAG  VARCHAR2(1);
P_MNFNO     NUMBER;

BEGIN
 
    IF INSERTING THEN
        IF :NEW.IFYN <> 'S' THEN
            RETURN;
        END IF;
   
        P_MNFCD := '0001';
        P_MNFNO := 0;
       
        P_ITEMFLAG := (CASE :NEW.ITEMFLAG
                        WHEN 'D' THEN 'M'
                        WHEN 'V' THEN 'Y'
                        WHEN 'M' THEN 'W'
                        ELSE :NEW.ITEMFLAG
                      END);

            IF :NEW.IFMODE = 'I' THEN
           
                FOR A0 IN (
                    SELECT MNFCD FROM ER_MNF
                    WHERE ITEMFLAG = :NEW.ITEMFLAG
                    ORDER BY TO_NUMBER(SUBSTR(MNFCD, 2)) DESC
                ) LOOP
                    P_ITEMFLAG := SUBSTR(A0.MNFCD, 1, 1);
                    P_MNFNO := TO_NUMBER(SUBSTR(A0.MNFCD, 2)) + 1;
                    EXIT;
                END LOOP;
               
                IF P_MNFNO > 0 THEN
                    P_MNFCD := TO_CHAR(P_MNFNO);
                   
                    LOOP
                        P_MNFCD := '0' || P_MNFCD;
                       
                        IF LENGTH(P_MNFCD) = 4 THEN
                            P_MNFCD := P_ITEMFLAG || P_MNFCD;
                            EXIT;
                        END IF;
                    END LOOP;
                END IF;
               
                INSERT INTO ER_MNF(
                    ITEMFLAG,
                    MNFFLAG,
                    MNFCD,
                    MNFNM,
                    CHRGNM,
                    TELNO,
                    FAXNO,
                    CHRGHPNO,
                    NOTE,
                    RGTID,
                    RGTDT,
                    LSTUPDID,
                    LSTUPDDT
                )
                VALUES(
                    :NEW.ITEMFLAG,
                    NVL(:NEW.MNFFLAG, '1'),
                    P_MNFCD,
                    :NEW.MNFNM,
                    '',
                    '',
                    '',
                    '',
                    '',
                    'ADMIS',
                    SYSDATE,
                    'ADMIS',
                    SYSDATE
                );
               
                :NEW.IFYN := 'Y';
                :NEW.NMCMNFCD := P_MNFCD;
               
            ELSIF :NEW.IFMODE = 'U' THEN
                UPDATE ER_MNF
                   SET MNFNM = :NEW.MNFNM
                WHERE ITEMFLAG = :NEW.ITEMFLAG
                  AND MNFCD = :NEW.NMCMNFCD;
                 
                :NEW.IFYN := 'Y';
            END IF;
    END IF;
END;

==============================================

위 처럼 A계정에서 B계정에 있는 테이블의 트리거를 생성했는데

실행 시 ORA-04098 에러 (트리거 부적합) 오류가 나오네요.

A계정에서 B계정 해당 테이블의 SELECT, UPDATE, INSERT, DELETE 권한이 모두 있고요.

ER_MNF 테이블에 대한 권한도 A계정에서 모두 가지고 있습니다.

인터넷을 찾아봐도 왜 오류가 나는지 원인을 찾을수가 없네요.

고수분들 부탁드리겠습니다.

by 마농 [2014.08.26 13:16:14]

오류 메시지 그대로 입니다. 트리거가 부적합 한거죠.

컴파일이 제대로 되지 않은 오류 상태로 트리거가 생성된게 아닐런지요?

트리거 컴파일 다시 해보시구요. 컴파일시 발생하는 에러 확인하세요.


by 개발뉴비 [2014.08.26 14:04:05]

원인을 찾았네요.. 일단 컴파일 해도 오류는 나지 않았습니다.

확인 해 보니 System 계정에서도 해당 트리거를 생성해 놨더라고요...

같은 이름의 중복 트리거 때문에 오류가 났던거였습니다.

답변 감사드립니다~

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입