2017년 6월 30일 금요일

오라클 EXCEPTION 진행 문제.

CREATE OR REPLACE PROCEDURE PROCEDURE1
AS

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를 발생시키거나, 메인 블록만 남기는 방법을 선택해야 한다.

댓글 없음:

댓글 쓰기