Published 2022. 11. 25. 20:24

< 예외처리부 EXCEPTION >


     예외(EXCEPTION) : 실행 중 발생되는 오류 
     
     [표현법]
     EXCEPTION 
         WHEN 예외명1 THEN 예외처리구문1;
         WHEN 예외명2 THEN 예외처리구문2;
         ...
         WHEN OTHERS THEN 예외처리구문;
         
    * 시스템 예외 (오라클에서 미리 정의해둔 예외)
     - NO_DATA_FOUND : SELECT한 결과가 한 행도 없을 경우 
     - TOO_MANY_ROWS : SELECT한 결과가 여러행일 경우 
     - ZERO_DIVIDE : 0으로 나누기 했을 경우 
     - DUP_VAL_ON_INDEX : UNIQUE 제약조건에 위배되었을 경우
     ...
     


1)  ZERO_DIVIDE  예외 : 0으로 나누기했을 경우 

DECLARE
    RESULT NUMBER;
BEGIN
    RESULT := 10/ &숫자;
    DBMS_OUTPUT.PUT_LINE('RESULT : '|| RESULT);
EXCEPTION
    --WHEN ZERO_DIVIDE THEN DBMS_OUTPUT.PUT_LINE('나누기 연산시 0으로 나눌 수 없습니다.');
    WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('나누기 연산시 0으로 나눌 수 없습니다.');
END;

 

2) DUP_VAL_ON_INDEX 예외 : UNIQUE 제약조건 위배

BEGIN
    UPDATE EMPLOYEE
    SET EMP_ID = '&변경할사번'
    WHERE EMP_NAME = '노옹철';
EXCEPTION 
    WHEN DUP_VAL_ON_INDEX THEN DBMS_OUTPUT.PUT_LINE('이미 존재하는 사번입니다.');
END;
/

 

3) TOO_MANY_ROWS : SELECT 결과가 여러행일 경우
    NO_DATA_FOUND : SELECT 결과가 한행도 없을 경우 

DECLARE 
    EID EMPLOYEE.EMP_ID%TYPE;
    ENAME EMPLOYEE.EMP_NAME%TYPE;
BEGIN
    SELECT EMP_ID,EMP_NAME
     INTO EID, ENAME
     FROM EMPLOYEE
     WHERE MANAGER_ID = &사수사번;
     
     DBMS_OUTPUT.PUT_LINE(EID || ', '|| ENAME);
EXCEPTION 
    WHEN TOO_MANY_ROWS THEN DBMS_OUTPUT.PUT_LINE('너무 많은 사원이 조회되었습니다.');
    WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('조회결과가 없습니다.');
END;
/

 

'ORACLE' 카테고리의 다른 글

ORACLE 14. OBJECT(TRIGGER)  (1) 2022.11.29
ORACLE 13. PLSQL _반복문  (0) 2022.11.25
ORACLE 13. PLSQL _조건문  (0) 2022.11.25
ORACLE 12. OBJECT (SEQUENCE)  (0) 2022.11.25
ORACLE 11. OBJECT (VIEW) _ VIEW 옵션  (0) 2022.11.24
복사했습니다!