오라클 저장함수 RAISE_APPLICATION_ERROR를 사용하여 오류코드 -20000부터 -20999의 범위 내에서 사용자 정의 예외를 만들수 있다.
– STEP 1 : 예외의 이름을 선언 (선언절)
– STEP 2 : RAISE문을 사용하여 직접적으로 예외를 발생시킨다(실행절)
– STEP 3 : 예외가 발생할 경우 해당 예외를 참조한다(예외절)
사용자 정의 예외 예제
-- 입력한 부서의 사원이 5명보다 적으면 사용자 정의 예외가 발생하는 예제 SQL> CREATE OR REPLACE PROCEDURE User_Exception (v_deptno IN emp.deptno%type ) IS -- 예외의 이름을 선언 user_define_error EXCEPTION; -- STEP 1 cnt NUMBER; BEGIN DBMS_OUTPUT.ENABLE; SELECT COUNT(empno) INTO cnt FROM emp WHERE deptno = v_deptno; IF cnt < 5 THEN -- RAISE문을 사용하여 직접적으로 예외를 발생시킨다 RAISE user_define_error; -- STEP 2 END IF; EXCEPTION -- 예외가 발생할 경우 해당 예외를 참조한다. WHEN user_define_error THEN -- STEP 3 RAISE_APPLICATION_ERROR(-20001, '부서에 사원이 몇명 안되네요..'); END; / -- DBMS_OUTPUT.PUT_LINE을 출력하기 위해 사용 SQL> SET SERVEROUTPUT ON ; -- 10부서의 사원이 5보다 적기 때문에 사용자 정의 예외가 발생. SQL> EXECUTE user_exception(10); BEGIN user_exception(10); END; * 1행에 오류: ORA-20001: 부서에 사원이 몇명 안되네요.. ORA-06512: "SCOTT.USER_EXCEPTION", 줄 17에서 ORA-06512: 줄 1에서 -- 20부서로 실행을 하면 에러가 발생하지 않는 것 을 알 수 있다. SQL> EXECUTE user_exception(20); PL/SQL 처리가 정상적으로 완료되었습니다.