애플리케이션 오류 발생(PL/SQL)

RAISE_APPLICATION_ERROR 프로시저는 사용자 제공 오류 코드 및 메시지에 기반하여 예외를 발생시킵니다. 이 프로시저는 PL/SQL 컨텍스트에서만 지원됩니다.

구문

구문 도표 읽기시각적 구문 도표 생략
>>-RAISE_APPLICATION_ERROR--(--error-number--,--message--,--+---------------------------+--)--;-><
                                                            |                 .-false-. |         
                                                            '-keeperrorstack--+-------+-'         

설명

error-number
벤더 고유 번호이며, 오류 코드에 맵핑된 후 SQLCODE라는 변수에 저장됩니다. RAISE_APPLICATION_ERROR 프로시저는 사용자 정의 error-number 값(-20000에서 -20999까지)을 수락합니다. 오류 메시지에서 리턴되는 SQLCODE는 SQL0438N입니다. SQLSTATE는 클래스 'UD'와 error-number 값의 마지막 3자리에 해당하는 3자를 포함합니다.
message
최대 길이가 70바이트인 사용자 정의 메시지입니다.
keeperrorstack
오류 스택의 유지 여부를 표시하는 선택적 부울 값입니다. 현재 기본값인 false만 지원됩니다.

다음 예는 RAISE_APPLICATION_ERROR 프로시저를 사용하여 누락된 직원 정보에 특정한 오류 코드 및 메시지를 표시합니다.
CREATE OR REPLACE PROCEDURE verify_emp (
    p_empno         NUMBER
)
IS
    v_ename         emp.ename%TYPE;
    v_job           emp.job%TYPE;
    v_mgr           emp.mgr%TYPE;
    v_hiredate      emp.hiredate%TYPE;
BEGIN
    SELECT ename, job, mgr, hiredate
        INTO v_ename, v_job, v_mgr, v_hiredate FROM emp
        WHERE empno = p_empno;
    IF v_ename IS NULL THEN
        RAISE_APPLICATION_ERROR(-20010, 'No name for ' || p_empno);
    END IF;
    IF v_job IS NULL THEN
        RAISE_APPLICATION_ERROR(-20020, 'No job for' || p_empno);
    END IF;
    IF v_mgr IS NULL THEN
        RAISE_APPLICATION_ERROR(-20030, 'No manager for ' || p_empno);
    END IF;
    IF v_hiredate IS NULL THEN
        RAISE_APPLICATION_ERROR(-20040, 'No hire date for ' || p_empno);
    END IF;
    DBMS_OUTPUT.PUT_LINE('Employee ' || p_empno ||
        ' validated without errors');
EXCEPTION
    WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('SQLCODE: ' || SQLCODE);
        DBMS_OUTPUT.PUT_LINE('SQLERRM: ' || SQLERRM);
END;

CALL verify_emp(7839);

SQLCODE: -438
SQLERRM: SQL0438N  Application raised error or warning with
 diagnostic text: "No manager for 7839".  SQLSTATE=UD030