본문 바로가기

DB관련/oracle

예외와 예외처리

A>예외

 

오라클 예외와 사용자 정의 예외가 있다.

1.오라클 예외

오라클이 정의한 상황에서 자동 발생

예외명이 정해진것과 없는것이 있다.

 

2. 사용자 정의 예외 

사용자가 예외처리를 정의

예외처리부에서 RAISE 문을 통해 명시적으로 예외를 발생시킨다.

 

 

 

 

 

B>종류

ACCESS_INTO_NULL

CASE_NOT_FOUND
COLLECTION_IS_NULL

CURSOR_ALREADY_OPEN :이미 커서가 열려있음

JUP_VAL_ON_INDEX: 인덱스 중복

INVALID_NUBER:문자 to 숫자 실패

 

 

 

 

 

C> 사용

주의점 : 예외 종류가 중복되면 안된다.

 

문형1.

DECLARE 

BEGIN

실행문

실행문

EXCETPION

WHEN 오류 THEN 실행 내용

END;

 

문형2. 사용자 정의 오류

DECLARE

예외 이름  EXCEPTION;   -- 예외 선언 

PRAGMA EXCPETION_INIT(예외 이름, 지정 코드)  --예외 초기화

 

 

BEGIN

실행문

실행문

EXCETPION

WHEN 오류 THEN 실행 내용

END;

 

 

예시1.

DECLARE

        v_ename emp.ename%TYPE;

BEGIN

        SELECT ename INTO v_ename FROM emp

        WHERE ename LIKE'A%';

        DBMS_OUTPUT.PUT_LINE('사원명 '||v_ename);

EXCEPTION

        WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('해당 사원 없음' );

        WHEN TOO_MANY_ROWS THEN DBMS_OUTPUT.PUT_LINE('사원 두명 이상' );

END;

 

 

예시2. 사용자 정의 예외

DECLARE

         sawon_exist EXCEPTION;

         PRAGMA EXCEPTION_INIT(sawon_exist,-2292);  --예외 초기화 진행(예외이름, 예외번호)

--PRAGMA 는 의사명령어로 , 명령문이 컴파일러 지시어임을 의미

--블록실행시 처리되지 않음

BEGIN 

        DELETE FROM dept

        WHERE deptno = &dno;

        COMMIT;

EXCEPTION

        WHEN sawon_exist THEN

        DBMS_OUTPUT.PUT_LINE('사원이 존재합니다');

END;

 

 

 

 

 

C>RAISE 를 이용한 예외처리

RAISE는 예외를 일으킬 수 있다.

 

예시1.

DECLARE

        v_empno emp.empno%TYPE;

        v_no emp.empno%TYPE;

        no_empno EXCEPTION;   --EXCEPTION 선언

BEGIN

        DELETE FROM emp WHERE empno = &empno;

        IF SQL%NOTFOUND THEN RAISE no_empno; --예외 불러오기

        END IF;

EXCEPTION  --예외 처리 수행문

        WHEN no_empno THEN

        DBMS_OUTPUT.PUT_LINE('사원 업음');

END;

 

예시2. RAISE_APPLICATION_ERROR 프로시져를 이용한 예외처리

첫번째 매개변수 숫자는 20000 ~20999 까지

 

DECLARE

       v_empno emp.empno%TYPE;

       v_no emp.empno%TYPE;

       no_empno EXCEPTION;

BEGIN

       DELETE FROM emp WHERE empno = &empno;

       IF SQL%NOTFOUND THEN

       RAISE_APPLICATION_ERROR(-20100,'존재 하지 않는 사번'); 

       END IF;

END;

'DB관련 > oracle' 카테고리의 다른 글

서브 프로그램 - 내장함수(FUNCTION)  (0) 2021.01.21
서브 프로그램 - 프로시져(PROCEDURE)  (0) 2021.01.21
PL/SQL -4 CURSOR  (0) 2021.01.21
PL/SQL 3- 복합 변수, 제어문  (0) 2021.01.20
PL/SQL -2 스칼라 변수  (0) 2021.01.20