[ORACLE] PL/SQL 예외~ 사용자 정의 예외 사용하는 방법 (User-Defined Exceptions) [오라클]

오라클 PL/SQL에서 사용자 정의 예외를 사용하는 방법에 대해 알아보도록 하겠습니다. 예외는 반드시 코드와 메시지가 동반합니다. 사용자 정의 예외 또한 코드가 필요한 법이지요~ 사용할 수 있는 오류코드는 -20000부터 -20999 범위입니다. 다음과 같이 사용자 정의 예외를 준비해 보았습니다.

user defined exception

사용자 정의 예외에 대한 설명은 아래에 있습니다.

SET SERVEROUTPUT ON SIZE 1000000;

DECLARE
   BEOMSANG   VARCHAR2 (8);
BEGIN
   BEGIN
      SELECT DUMMY INTO BEOMSANG FROM DUAL;

      RAISE_APPLICATION_ERROR (-20000, '-20000!');
   EXCEPTION
      WHEN OTHERS
      THEN
         DBMS_OUTPUT.PUT_LINE ('SQLCODE: ' || SQLCODE || ', SQLERRM: ' || SQLERRM);
   END;

   RAISE_APPLICATION_ERROR (-20001, '-20001!');
   DBMS_OUTPUT.PUT_LINE ('completed');
EXCEPTION
   WHEN OTHERS
   THEN
      --ORA-20002: -20002!
      --RAISE_APPLICATION_ERROR (-20002, '-20002!');
      DBMS_OUTPUT.PUT_LINE ('SQLCODE: ' || SQLCODE || ', SQLERRM: ' || SQLERRM);
END;
/
SQLCODE: -20000, SQLERRM: ORA-20000: -20000!
SQLCODE: -20001, SQLERRM: ORA-20001: -20001!

PL/SQL procedure successfully completed.

우선 PL/SQL BEGIN 파트에서 다시 PL/SQL 블록을 추가하였으며, 해당 BEGIN 파트 안에 'RAISE_APPLICATION_ERROR (-20000, '-20000!');'와 같이 예외를 의도적으로 발생시켰습니다. 출력을 보면 예외가 발생하였음에도 서브 프로그램을 벗어나서 계속 동작을 한다는 것을 확인할 수 있습니다. 예외처리를 하였기 때문이지요. 

그러나 'RAISE_APPLICATION_ERROR (-20001, '-20001!');' 파트를 맞이하여 예외가 발생하기 때문에 실행부의 마지막 'DBMS_OUTPUT.PUT_LINE ('completed');' 출력에는 도달할 수 없는 것을 확인할 수 있습니다. 

더불어 예외 처리부에 'RAISE_APPLICATION_ERROR (-20002, '-20002!');' 부분을 주석처리 해놓았는데요, 주석이 되어 있지 않다면 해당 예외는 애플리케이션으로 throw하는 형태를 취하게 됩니다.

내부 사용자 정의 예외 -20000 이 없었다면 'completed'까지 도달하였을 것입니다.

댓글