[ Oracle - Procedure 문법_EXCEPTION_010 ]

 

시스템 EXCEPTION

1. 변수정의 :

   문법 : SQL_ERROR_RTN   EXCEPTION;

   설명 : 모름???

2. SOURCE에서 사용법

    문법 : BEGIN

                         SELECT A.item_mon

                         INTO      nItem_mon

                         FROM   py_change A

                         WHERE  A.input_ymd = 'value' ;

              EXCEPTION      WHEN OTHERS THEN

                         nItem_mon  := 0;

              END;

     설명 : - select, insert, delete, update문이 실행 중 오류발생가능성 때문에 begin ~ exception~end; 문장을 기술한다.

               - select시 : others 는 주로 notfound 일 경우에 발생하므로  INTO 변수에 0 또는 space 값을 setting 한다.

               - insert, delete, update시 : others는 주로 오류가 발생한다.

                 이때, sqlcode  sqlerrm 시스템변수값을 활용하여 오류의 원인을 파악한다.

 

3.   EXCEPTION

      EXCEPTION

        WHEN NO_DATA_FOUND THEN

            i_errmsg := SQLCODE;

        WHEN OTHERS THEN

            i_errmsg := SQLCODE;

--------------------------------------------------------------------------

* 사용자 EXCEPTION

--------------------------------------------------------------------------

사용자 정의 예외처리는 오라클 서버에 의해 발생될 수 없는 예외 상황에 대해서 사용자가 임의로 정의하여 강제로 발생되게 하는 방법이다.

예외명은 DECLARE절에서 선언하고, 예외가 발생해야할 조건은 실행부분에 정의하면 된다. 예외 상황 발생시 처리해야할 루틴은 미리 정의된 Oracle Server 예외에서와 같이 명시해주면 된다. 단지 사용자가 정의한 예외명을 적어주면 된다.

[ 구문법 ]

    DECLARE

           Exception_name EXCEPTION;

           ......

     BEGIN

           ......

      RAISE Exception_name;

             ......

      EXCEPTION

      WHEN Exception_name THEN

               Statement-1;

               ......

 

[ 예제]

         DECLARE

                row_cnt int :=0;

               output_line varchar2(80);

               exception_row_over_5 EXCEPTION;

 

         BEGIN

               SELECT COUNT(*) INTO row_cnt FROM test_table;

               IF row_cnt > 5 THEN

                     RAISE exception_row_over_5;

               END IF;

               EXCEPTION

                     WHEN exception_row_over_5 THEN

                               output_line := 'Row_Count= ' || row_cnt;

                               dbms_output.put_line(output_line);

                END;

                /

 

Posted by 농부지기
,