99%の場合、少なくともどこかにログを記録せずに例外を黙って無視することは悪い習慣であることに同意しますが、これが完全に受け入れられる特定の状況があります。
このような状況では、NULLがあなたの友達です:
[...]
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
例外を無視することが望ましい2つの典型的な状況は次のとおりです。
1)コードに、ときどき失敗することがわかっているステートメントが含まれていて、この事実によってプログラムフローが中断されないようにする必要があります。この場合、次の例に示すように、ステートメントをネストされたブロックで囲む必要があります。
>CREATE OR REPLACE PROCEDURE MY_PROCEDURE()
IS
l_empoyee_name EMPLOYEES.EMPLOYEE_NAME%TYPE;
BEGIN
-- Catch potential NO_DATA_FOUND exception and continue
BEGIN
SELECT EMPLOYEE_NAME
INTO l_empoyee_name
FROM EMPLOYEES
WHERE EMPLOYEE_ID = 12345;
EXCEPTION
WHEN NO_DATA_FOUND THEN
NULL;
WHEN OTHERS THEN
RAISE;
END;
do_stuff();
EXCEPTION
WHEN OTHERS THEN
-- Propagate exception
RAISE;
END;
PL / SQLは通常、VisualBasicで知られているOnErrorResume Nextタイプの例外処理を許可しないことに注意してください。この場合、すべての例外は無視され、プログラムは何も起こらなかったかのように実行され続けます(エラーが発生すると、PLで次のタイプのエラー処理が再開されます/ SQL oracle )。失敗する可能性のあるステートメントをネストされたブロックで明示的に囲む必要があります。
2)プロシージャは非常に重要ではないため、スローされるすべての例外を無視しても、メインプログラムのロジックには影響しません。 (ただし、これは非常にまれであり、長期的にはデバッグの悪夢につながる可能性があります)
BEGIN
do_stuff();
EXCEPTION
WHEN OTHERS THEN
-- Ignore all exceptions and return control to calling block
NULL;
END;