예외처리
예외에는 시스템 예외와 사용자 정의 예외가 있다. 시스템 예외는 오라클 내부에 미리 정의된 예외이고, 사용자 정의 예외는 사용자가 직접 예외를 정해서 사용하는 것이다.
구체적인 예외명을 알 수 없을 때는 OTHERS를 사용하면 오라클 시스템에서 PL/SQL 코드상에서 발생한 런타임 예외를 자동으로 잡아준다.
구문
1 2 3 4 | EXCEPTION WHEN 예외명 THEN 예외처리구문1 WHEN 예외명 THEN 예외처리구문2 ... WHEN OTHERS THEN 예외처리구문N; | cs |
예제
1 2 3 4 5 6 | DECLARE VI_NUM NUMBER := 0; BEGIN VI_NUM := 10 / 0; DBMS_OUTPUT.PUT_LINE('SUCCESS'); END; | cs |
예외가 발생해 'SUCCESS'가 출력되지 않았다. 그렇다면, 예외를 처리하게 되면 어떻게 될까?
1 2 3 4 5 6 7 8 9 10 | DECLARE VI_NUM NUMBER := 0; BEGIN VI_NUM := 10 / 0; DBMS_OUTPUT.PUT_LINE('SUCCESS'); EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('예외가 발생했습니다.'); END; | cs |
예외가 발생했다는 문자열이 출력되고 종료된다. 이 전과는 달리, 함수가 정상적으로 종료되 오류 메시지가 출력되지 않았음을 확인할 수 있다.
이 둘의 차이를 보기위해, 예외처리를 한 프로시저와 그렇지 않은 프로시저를 만들어보겠다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | CREATE OR REPLACE PROCEDURE NO_EXCEPTION_PROC IS VI_NUM NUMBER := 0; BEGIN VI_NUM := 10 / 0; DBMS_OUTPUT.PUT_LINE('SUCCESS'); END; CREATE OR REPLACE PROCEDURE EXCEPTION_PROC IS VI_NUM NUMBER := 0; BEGIN VI_NUM := 10 / 0; DBMS_OUTPUT.PUT_LINE('SUCCESS'); EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('예외가 발생했습니다.'); END; | cs |
프로시저들을 만들었으니, 각각 실행해보자.
예외처리가 없는 프로시저
1 2 3 4 5 6 | DECLARE VI_NUMBER NUMBER := 0; BEGIN NO_EXCEPTION_PROC; DBMS_OUTPUT.PUT_LINE('SUCCESS'); END; | cs |
예외처리를 한 프로시저
1 2 3 4 5 6 | DECLARE VI_NUMBER NUMBER := 0; BEGIN EXCEPTION_PROC; DBMS_OUTPUT.PUT_LINE('SUCCESS'); END; | cs |
예외처리를 한 경우, 프로시저가 정상적으로 종료되고 다음 로직이 수행된다. 그러나, 예외처리가 없는 경우 프로시저에서 강제적으로 종료되고 오류 메시지가 출력된다.
반응형
'📃 DATABASE > ORACLE' 카테고리의 다른 글
[PL/SQL] 예외처리(3) : 효율적인 예외처리 (2) | 2018.01.26 |
---|---|
[PL/SQL] 예외처리(2) : 시스템 예외와 사용자정의 예외 (0) | 2018.01.25 |
[PL/SQL] 프로시저(PROCEDURE) (0) | 2018.01.23 |
[PL/SQL] 사용자 정의함수 (0) | 2018.01.22 |
[PL/SQL] 반복문 (0) | 2018.01.21 |