2017년 6월 30일 금요일

오라클 EXCEPTION 진행 문제.

CREATE OR REPLACE PROCEDURE PROCEDURE1AS        V_CNTR_NO VARCHAR2(13) ;        V_ITEM_CD VARCHAR2(13) ;BEGIN    DBMS_OUTPUT.PUT_LINE('시작.') ;    BEGIN        SELECT CNTR_NO INTO V_CNTR_NO FROM TB_OD_CNSGN_FEE;    EXCEPTION    WHEN NO_DATA_FOUND THEN        DBMS_OUTPUT.PUT_LINE('계약번호가 없습니다.') ;    WHEN TOO_MANY_ROWS THEN        DBMS_OUTPUT.PUT_LINE('계약번호가 두건 이상입니다.') ;    END;        DBMS_OUTPUT.PUT_LINE('중간.') ;        BEGIN        SELECT ITEM_CD INTO V_ITEM_CD FROM TB_OD_CNSGN_FEE;    EXCEPTION    WHEN NO_DATA_FOUND THEN        DBMS_OUTPUT.PUT_LINE('아이템코드가 없습니다.') ;    WHEN TOO_MANY_ROWS THEN        DBMS_OUTPUT.PUT_LINE('아이템코드가 두건 이상입니다.') ;    END;        DBMS_OUTPUT.PUT_LINE('끝.') ;    EXCEPTION  WHEN OTHERS THEN    DBMS_OUTPUT.PUT_LINE('TOP EXCEPTION.') ;END PROCEDURE1;-------실행결과----------------------------계약번호가 두건 이상입니다.아이템코드가 두건 이상입니다.끝.프로세스가 종료되었습니다.

보통 EXCEPTION 처리를 위와 같이 중첩 블록을 사용하였다.
문제는 EXCEPTION이 발생하여도 해당 블록만 멈추고 다음으로 계속 진행을 한다.
자바와는 다르다.
그래서 각 블록마다 RAISE_APPLICATION_ERROR를 발생시키거나, 메인 블록만 남기는 방법을 선택해야 한다.

댓글 없음:

댓글 쓰기