RAISE_APPLICATION_ERRORストアドプロシージャは、開発者が例外を引き起こすことによってプロシージャが呼び出されるSPLプログラムの処理を意図的に中止することを可能にする。
例外は、例外処理で説明したのと同じ方法で処理されます。 さらに、RAISE_APPLICATION_ERRORストアドプロシージャは、プログラムのユーザー定義コードとエラーメッセージを提供します。 このようにして、例外を識別することができる。
RAISE_APPLICATION_ERROR(error_number, message);
説明:
- error_numberは、ストアドプロシージャの実行時にSQLCODEという名前の変数で返される整数値または式です。 error_numberは-20000と-20999の間の値でなければなりません。
- メッセージは文字列リテラルまたはSQLERRMという名前の変数で返される式です。
次の例では、RAISE_APPLICATION_ERRORストアドプロシージャを使用して、不足している従業員情報に基づいて別のコードとメッセージを表示します。
CREATE OR REPLACE PROCEDURE verify_emp ()
p_empno番号
)
IS
v_ename emp.ename%TYPE;
v_job emp.job%TYPE;
v_mgr emp.mgr%TYPE;
v_hiredate emp.hiredate % TYPE;
開始
SELECT ename、job、mgr、hiredate
インv_ename、v_job、v_mgr、v_hiredate FROM emp
empno = p_empno;
IF v_ename IS NULL THEN
RAISE_APPLICATION_ERROR(-20010、'の名前なし' | | p_empno);
END IF;
v_jobがNULLである場合
RAISE_APPLICATION_ERROR(-20020、'No job for '| | p_empno);
END IF;
v_mgrがNULLの場合
RAISE_APPLICATION_ERROR(-20030、'No manager for '| | p_empno);
END IF;
v_hiredateがNULLである場合
RAISE_APPLICATION_ERROR(-20040、「採用日なし」 | | p_empno);
END IF;
DBMS_OUTPUT.PUT_LINE('Employee '| | p_empno | |
'エラーなしで検証された');
例外
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('SQLCODE: ' || SQLCODE);
DBMS_OUTPUT.PUT_LINE('SQLERRM: '| | SQLERRM);
エンド;
従業員レコードにマネージャー番号がない場合、次の出力が生成されます。
EXEC verify_emp(7839);
SQLCODE: -20030
SQLERRM: polar-20030: マネージャーなし7839