アプリケーション・エラー生成 (PL/SQL)

RAISE_APPLICATION_ERROR プロシージャーでは、ユーザーが指定したエラー・コードとメッセージに基づいて例外を発生させます。 このプロシージャーは、PL/SQL コンテキスト内でのみサポートされます。

構文

構文図を読む構文図をスキップするRAISE_APPLICATION_ERROR(error-number ,message, keeperrorstackfalse );

説明

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