상세 컨텐츠

본문 제목

오라클 사용자 에러출력하기

데이터베이스

by 김일국 2011. 3. 5. 13:38

본문

============= 미리정의된 에러 출력 ================================

CREATE OR REPLACE PROCEDURE PreException_test

     (v_deptno IN emp.empno%TYPE)

IS

     v_emp emp%ROWTYPE;

BEGIN

     DBMS_OUTPUT.ENABLE;


     SELECT empno, ename, deptno

     INTO v_emp.empno, v_emp.ename, v_emp.deptno

     FROM emp

     WHERE deptno = v_deptno ;

     DBMS_OUTPUT.PUT_LINE('사번 : ' || v_emp.empno);

     DBMS_OUTPUT.PUT_LINE('이름 : ' || v_emp.ename);

     DBMS_OUTPUT.PUT_LINE('부서번호 : ' || v_emp.deptno);

EXCEPTION

     WHEN DUP_VAL_ON_INDEX THEN

        DBMS_OUTPUT.PUT_LINE('데이터가 존재 합니다.');

        DBMS_OUTPUT.PUT_LINE('DUP_VAL_ON_INDEX 에러 발생');

     WHEN TOO_MANY_ROWS THEN

        DBMS_OUTPUT.PUT_LINE('TOO_MANY_ROWS 에러 발생');

     WHEN NO_DATA_FOUND THEN

        DBMS_OUTPUT.PUT_LINE('NO_DATA_FOUND 에러 발생');

     WHEN OTHERS THEN

        DBMS_OUTPUT.PUT_LINE('기타 에러 발생');

END;

/

 

============== 미리 정의되지 않은 에러 ==================================

CREATE OR REPLACE PROCEDURE NonPreException_Test

IS

     not_null_test EXCEPTION; -- STEP 1

     /* not_null_test 는 선언된 예외 이름

     -1400 Error 처리번호는 표준 Oracle7 Server Error 번호 */

     PRAGMA EXCEPTION_INIT(not_null_test, -1400); -- STEP 2

BEGIN

     DBMS_OUTPUT.ENABLE;

    
     -- empno 를 입력하지 않아서 NOT NULL 에러 발생

     INSERT INTO emp(ename, deptno) VALUES('tiger', 30);

EXCEPTION

     WHEN not_null_test THEN -- STEP 3

        DBMS_OUTPUT.PUT_LINE('not null 에러 발생 ');

END;

/

 

=============== 사용자 정의 예제 =======================================

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;

관련글 더보기

댓글 영역