Oracle PL/SQL 강좌
사용자 정의 예외(User-Defined Exceptions) 9 14 45,774

by 김정식 RAISE RAISE_APPLICATION_ERROR 사용자 정의 예외 EXCEPTION [2002.01.20]


  오라클 저장함수 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 처리가 정상적으로 완료되었습니다.
    

- 강좌 URL : http://www.gurubee.net/lecture/1073

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

by 디스타임 [2007.11.12 11:58:52]
감사합니다.^^

by 김윤경 [2007.11.13 09:23:55]
사용자정의 예외도 자주 사용해야겠어요;

by 무리 [2008.04.29 23:58:50]
이건 죽어야 써먹을수 있겠군.

by 이승현 [2009.10.14 18:50:04]
is문 말고 declare문에서 예외 이름을 선언하면 안되는 건가요?

by good [2009.11.05 15:02:40]
익명 블록에서도 사용 할 수 있습니당.

by 다쓰 [2010.11.24 15:46:17]
잘배우고갑니다^^

by 손님 [2011.01.04 19:31:45]
이건 좀 써먹을수 있겠군 ㅋㅋ

by 쫑 [2012.01.27 13:58:22]
이해가 잘되네요^^

by 손님 [2012.10.08 19:58:02]
 select * from dual

by 손님 [2012.11.02 11:11:36]

오류코드 신기하네요 ㅎㅎ


by 점프 [2013.07.18 15:15:41]
할룽

by 신화씨앤씨 [2013.10.22 21:33:24]

잘 보고 갑니다~^^


by 꾸쉬꾸쉬 [2014.05.30 13:35:02]

RAISE_APPLICATION_ERROR  뒤에   -20001  는 무슨 오류 코드죠? 

ORA-20001 을 말하는 건가요?


by 임상준 [2014.05.30 14:08:49]

네...

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입