150324 예외처리

ORACLE/PL/SQL 2015. 3. 24. 15:06
 

◎ 에러의 종류

- 런타임 에러  : 논리적으로 맞지만 이상한것 

   → 예외처리를 발생시킴

- 컴파일 에러 : 오타등으로 


◎ 예외처리 종류

오라클 예외

- 이름이 정해진 예외(predefinde Oracle Exception)

- 이름이 정해지지 않은 예외(non-predefinde Oracle Exception)


★★★ 사용자 정의 예외

 예외 처리가 없다면 프로그램이 실패한 체로 종료가됨

※ 에러코드 20000  - 20999 까지는 사용자가 만든에로

방법

① 선언부에서 선언한다음 실행부 or 예외처리 부에서 RAISE 문을 통해 실행 

② RAISE_APPLICATION_ERROR 프로시저를 통해 사용 


종류

①  ORACLE에서 정의한 이름을 사용해서 사용자가 예외를 출력하기 

EXCEPTION

  WHEN NO_DATA_FOUND THEN

  DBMS_OUTPUT.PUT_LINE(' No people !');

  WHEN TOO_MANY_ROWS THEN

  DBMS_OUTPUT.PUT_LINE(' More than 2 people !');

★★ PRAGMA 키워드를

 ORACLE에서 정의한 내용을 사용자가 다시 선언 해서 예외 처리하기

맨첫번째 줄에 있음

ORA-02292: integrity constraint (SCOTT.FK_DEPTNO) violated - child record found


DECLARE

  child_exist EXCEPTION; 

  PRAGMA EXCEPTION_INIT(child_exist,-02292); 

 BEGIN

  DELETE FROM dept

  WHERE deptno =&dno;

  COMMIT;

EXCEPTION

  WHEN child_exist THEN

  DBMS_OUTPUT.PUT_LINE('Can not delete! Child key found ! ');

 

 END ;

 /


 테이블에 데이터가 없는경우 RISE 를 사용 예외선언 및 예외 처리를 해준다

  - 문법적으로 오류는 아님

DECLARE

-- 예외를 선언 해준다 

 no_empno EXCEPTION ;

BEGIN

  UPDATE EMP

  SET sal = 6000

  WHERE empno =&empno;


-- 수행한 데이터가 아무것도 없는경우

IF SQL%NOTFOUND THEN

  --RAISE 명령어를 수행함  

RAISE no_empno ;

  END IF;

-- 예외를 수행함  

EXCEPTION

  WHEN no_empno THEN

  DBMS_OUTPUT.PUT_LINE('Not Exist your number ! ');

 END ;

 /














'ORACLE > PL/SQL' 카테고리의 다른 글

참조하기  (0) 2015.03.26
150325 서브프로그램  (0) 2015.03.25
150324 커서  (0) 2015.03.24
150323 조건문 & 반복문  (0) 2015.03.23
150323 변수  (0) 2015.03.23
Posted by 히드라야
,