상세 컨텐츠

본문 제목

오라클 사용자 예외처리 사용 방법

Programming/Database

by otamot 2010. 8. 23. 20:03

본문

  PL-SQL 작성시 오라클 저장함수 RAISE_APPLICATION_ERROR를 사용하여 사용자 정의 예외를 다룰 수 있다. 우리히가 흔히 보는 'ORA-XXXXX'이런 코드를 작성해서 메시지와 함께 발생시킬 수 있다. 숫자 범위는 -20000부터 -20999의 범위 내에서 가능하다.

CREATE OR REPLACE FUNCTION FN_GET_MACHINE_NO(
       l_cd IN VARCHAR2
      ,m_cd IN VARCHAR2
      ,s_cd IN VARCHAR2
) RETURN VARCHAR IS  retval VARCHAR2(14);

  seqNextVal VARCHAR(7);
  lCdVal     VARCHAR(1);
  mCdVal     VARCHAR(2);
  sCdVal     VARCHAR(3);
  INPUT_ERR  EXCEPTION;
  OUTPUT_ERR EXCEPTION;

BEGIN
     seqNextVal := 0;
     lCdVal := TRIM(l_cd);
     mCdVal := TRIM(m_cd);
     sCdVal := TRIM(s_cd);
  
     BEGIN 
           -- 20100823 LCS 수정 : 소분류가 NULL이면 '99'기본값 설정.
           IF(sCdVal IS NULL) THEN
               sCdVal := '99';
           END IF;
         
           IF( lCdVal IS NULL OR mCdVal IS NULL ) THEN
               RAISE INPUT_ERR;
           ELSE
               SELECT SUBSTR( LPAD(DQ_DQMACHN_INDEX.NEXTVAL , 12, '0') , 6, 7)
                 INTO seqNextVal
               FROM DUAL  ;
     
               retval := lCdVal || mCdVal || sCdVal || TO_CHAR(SYSDATE, 'YY') || seqNextVal  ;
           END IF;
           
           IF LENGTH(retval) <> 14 THEN
              RAISE OUTPUT_ERR;
           END IF;
     
     EXCEPTION
     
         WHEN INPUT_ERR THEN

           IF( lCdVal IS NULL ) THEN
                -- 대분류코드값이 없을 때 Exception 발생
                RAISE_APPLICATION_ERROR(-20998,'전달된 파라미터(분류코드)에 문제가 있습니다(대분류 코드값이 없습니다.)');
           ELSIF( lCdVal IS NULL OR mCdVal IS NULL ) THEN
                -- 중분류코드값이 없을 때 Exception 발생
                RAISE_APPLICATION_ERROR(-20998,'전달된 파라미터(분류코드)에 문제가 있습니다(중분류 코드값이 없습니다.)');
           END IF;
           
         WHEN OUTPUT_ERR THEN
           --DBMS_OUTPUT.PUT_LINE('생성된 기기관리번호('||retval||')는 14자리가 아닙니다.');
           RAISE_APPLICATION_ERROR(-20999,'생성된 기기관리번호('||retval||')는 14자리가 아닙니다.');
         WHEN NO_DATA_FOUND THEN
           NULL;
         WHEN OTHERS THEN
           NULL;
     END;
     
RETURN retval;

END FN_GET_MACHINE_NO;

  위 예제에서 처럼 최상단에 exception을 선언하고 중간에 RAISE를 사용해서 특정 조건에 만족하면 Exception을 발생시키고 하단에 RAISE_APPLLICATION_ERROR(...) 함수를 사용해서 구체적인 에러코드와 메시지를 구성해서 발생시키면 된다.
  이렇게 사용하게되면 Application단에서 exception 다루는 방법 그대로 잡아낼 수 있다. ORA-20999 Exception이 발생하게 된다.

관련글 더보기