-- 예외처리

DECLARE
    vName VARCHAR2(30);
    vSal NUMBER;
BEGIN
    SELECT name, sal INTO vName, vSal FROM emp WHERE empNo = '1001';
    -- SELECT name, sal INTO vName, vSal FROM emp WHERE empNo = '9001'; -- NO_DATE_FOUND
    -- SELECT name, sal INTO vName, vSal FROM emp; -- TOO_MANY_ROWS
    DBMS_OUTPUT.PUT_LINE(vName || ' : ' || vSal);
    
    EXCEPTION
        WHEN NO_DATA_FOUND THEN 
            DBMS_OUTPUT.PUT_LINE('등록된 자료가 없습니다.');
        WHEN TOO_MANY_ROWS THEN 
            DBMS_OUTPUT.PUT_LINE('두 개 이상의 레코드가 존재합니다.');
        WHEN OTHERS THEN
            DBMS_OUTPUT.PUT_LINE('기타 에러가 발생 했습니다.');
END;
/

 

-- 사용자 정의 예외

DECLARE
    vName VARCHAR2(30);
    vSal NUMBER;
    
    sal_check EXCEPTION; -- 사용자 정의 예외 선언
BEGIN
    SELECT name, sal INTO vName, vSal FROM emp WHERE empNo = '1001';
    IF vSal >= 3000000 THEN
        RAISE sal_check; -- 예외를 발생시킴
    END IF;
    DBMS_OUTPUT.PUT_LINE(vName || ' : ' || vSal);
    
    EXCEPTION
        WHEN NO_DATA_FOUND THEN 
            DBMS_OUTPUT.PUT_LINE('등록된 자료가 없습니다.');
        WHEN TOO_MANY_ROWS THEN 
            DBMS_OUTPUT.PUT_LINE('두 개 이상의 레코드가 존재합니다.');
        WHEN sal_check THEN
            DBMS_OUTPUT.PUT_LINE('급여가 300 이상입니다.');
        WHEN OTHERS THEN
            DBMS_OUTPUT.PUT_LINE('기타 에러가 발생 했습니다.');
END;
/

 

또, 여태까지 썼던

2021.08.20 - [쌍용강북교육센터/8월] - 0819_Oracle[PL/SQL] : PROCEDURE, FUNCTION 예제

 

IF 조건

RAISE_APPLICATION_ERROR(-20001, '여기에 메세지 입력');

END IF;

방법도 있었다.

 

이때 안에있는 번호는 20000 부터 20999까지 가능하다.

+ Recent posts