PL SQL

PL/SQL 예외 처리 (Exception Handling) - 3 (미리 정의되지 않은 에러)

n.han 2016. 7. 6. 14:05

2) 미리 정의되지 않은 Oracle 에러 (암시적 발생)

  EXCEPTION이 너무 많기 때문에, 모든 예외를 미리 정의할 수 없다. 따라서 미리 정의되지 않은 오류를 트랩할 수 있는 방법이 필요하다. 다음은 미리 정의 되지 않은 오류를 트랩하는 예제이다. Oracle 서버 오류 02290을 트랩하는 것이다.

 

DECLARE
  emp_rec emp%ROWTYPE ;
  e_ck EXCEPTION ;
  PRAGMA EXCEPTION_INIT (e_ck , -2290) ;
BEGIN
  SELECT * INTO emp_rec FROM emp WHERE ename = UPPER('&name') ;
  IF emp_rec.sal < 2000 THEN
    UPDATE emp SET sal = &salary WHERE empno = emp_rec.empno ;
  END IF ;
EXCEPTION
WHEN NO_DATA_FOUND THEN
  DBMS_OUTPUT.PUT_LINE ('NO DATA') ;
WHEN E_CK THEN
  DBMS_OUTPUT.PUT_LINE ('Invalid Salary') ;
WHEN OTHERS THEN
  DBMS_OUTPUT.PUT_LINE (SQLERRM) ;
END ;
/

 

EXCEPTION 타입의 변수를 선언하고, PRAGMA EXCEPTION_INIT (변수, -오류 번호)로 선언한다(오류 번호 앞에 가 붙는 것에 유의하라). 그리고 EXCEPTION에서 해당 예외에 대한 처리를 하는 것을 볼 수 있다.