오라클 트리거 생성시 에러 발생 0 7 4,139

by 네로 [PL/SQL] 트리거 오라클 [2016.11.16 11:04:11]


아래와 같이 트리거를 생성 하려 하는데 컴파일 하면 오류가 발생 합니다.

======== 트리거 구문 시작 ========

CREATE OR REPLACE TRIGGER ORG_MAPP_TRIGGER
       AFTER
       INSERT OR UPDATE ON IF_T_MAPPING
       FOR EACH ROW

    DECLARE

        -- 변수를 선언할 때는 DECLARE문을 사용해야 한다
        isr_full_nm varchar2(200);
        isr_nm      varchar2(200);
        isr_org_cd  varchar2(10);
        isr_s_dt    varchar2(10);
        isr_e_dt    varchar2(10);
        isr_gubun   varchar2(10);

    BEGIN

                FOR S1 IN
                    (
                         SELECT INSARANG_CD
                           FROM IF_T_MAPPING
                          WHERE BASE_DT = (SELECT MAX(BASE_DT) FROM IF_T_MAPPING)
                          MINUS
                         SELECT ISR_ORG_CD
                           FROM ORG_CODE_MAPP
                )
                LOOP

                     SELECT FULL_NM, LOW_NM, INSARANG_CD, S_DT, E_DT, USE_YN INTO isr_full_nm,isr_nm,isr_org_cd,isr_s_dt,isr_e_dt,isr_gubun   FROM IF_T_MAPPING  WHERE INSARANG_CD = S1.INSARANG_CD AND BASE_DT = (SELECT MAX(BASE_DT) FROM IF_T_MAPPING);

                             INSERT INTO ORG_CODE_MAPP(SEQ, ISR_FULL_NM, ISR_NM, ISR_ORG_CD, ISR_D_DT,ISR_E_DT, ISR_GUBUN)  VALUES(TO_NUMBER(SELECT MAX(SEQ)+1 FROM ORG_CODE_MAPP),isr_full_nm,isr_nm,isr_org_cd,isr_s_dt,isr_e_dt,DECODE(isr_gubun, '0', '현존', '1', '폐지'));

                END LOOP;

    END;

======= 트리거 구문 종료 ========

=======에러 구문 시작 ======

ORA-24344: success with compilation error

26/121  PL/SQL: ORA-00936: missing expression
26/9    PL/SQL: SQL Statement ignored

=======에러 구문 종료 =======

 

어디가 잘 못된 걸까요??

감사합니다.

 

 

by 우리집아찌 [2016.11.16 11:14:21]

http://www.gurubee.net/lecture/1065


by 네로 [2016.11.16 11:28:07]

커서 방식으로 변경 했는데도 에러가 발생 합니다.ㅠㅠ

 

CREATE OR REPLACE TRIGGER ORG_MAPP_TRIGGER
       AFTER
       INSERT OR UPDATE ON IF_T_MAPPING
       FOR EACH ROW

    DECLARE

    BEGIN

                FOR S1 IN
                    (
                         SELECT INSARANG_CD
                           FROM IF_T_MAPPING
                          WHERE BASE_DT = (SELECT MAX(BASE_DT) FROM IF_T_MAPPING)
                          MINUS
                         SELECT ISR_ORG_CD
                           FROM ORG_CODE_MAPP
                )
                LOOP
               DECLARE CURSOR SQL_CUR IS
                                     SELECT FULL_NM, LOW_NM, INSARANG_CD, S_DT, E_DT, USE_YN
                                       FROM IF_T_MAPPING
                                      WHERE INSARANG_CD = S1.INSARANG_CD
                                        AND BASE_DT = (SELECT MAX(BASE_DT) FROM IF_T_MAPPING);

                     BEGIN
                                        FOR V_CUR IN SQL_CUR LOOP
                                                 INSERT INTO ORG_CODE_MAPP(SEQ, ISR_FULL_NM, ISR_NM, ISR_ORG_CD, ISR_D_DT,ISR_E_DT, ISR_GUBUN)
                                                      VALUES (TO_NUMBER(SELECT MAX(SEQ)+1 FROM ORG_CODE_MAPP),V_CUR.FULL_NM, V_CUR.LOW_NM, V_CUR.INSARANG_CD, V_CUR.S_DT, V_CUR.E_DT ,DECODE(V_CUR.USE_YN, '0', '현존', '1', '폐지'));
                              END LOOP;
                                END;
                END LOOP;

    END;


by 우리집아찌 [2016.11.16 13:11:49]

for s1 in  <- 해당부분 지워주세요

 


by 네로 [2016.11.16 13:27:00]

그걸 지우면 바깥쪽 for 문을 전체 삭제 하라는 말씀 인가요????


by 우리집아찌 [2016.11.16 14:17:16]

그부분이 문제 있어 보이는데요 

for 문 두개 돌리지 마시고 하나로 합치는게 좋을듯 합니다


by 우리집아찌 [2016.11.16 14:23:22]

for문이 아니라 cursor 하나로..  핸드폰이라 힘드네요


by 네로 [2016.11.16 15:12:37]

해결했습니다.

감사합니다.

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