I když souhlasím s tím, že v 99 % případů je špatnou praxí mlčky ignorovat výjimky, aniž byste je alespoň někam zaprotokolovali, existují specifické situace, kdy je to naprosto přijatelné.
V těchto situacích je vaším přítelem NULL:
[...]
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
Dvě typické situace, kdy může být žádoucí ignorovat výjimky, jsou:
1) Váš kód obsahuje příkaz, o kterém víte, že občas selže a nechcete, aby tato skutečnost přerušila chod vašeho programu. V tomto případě byste měli příkaz uzavřít do vnořeného bloku, jak ukazuje následující příklad:
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;
Všimněte si, že PL/SQL obecně neumožňuje zpracování výjimek typu On Error Resume Next známého z Visual Basicu, kde jsou všechny výjimky ignorovány a program dále běží, jako by se nic nestalo (viz Při chybě obnoví další typ zpracování chyb v PL /SQL oracle ). Potenciálně chybné příkazy musíte explicitně uzavřít do vnořeného bloku.
2) Váš postup je tak nedůležitý, že ignorování všech výjimek, které vyvolá, neovlivní vaši hlavní logiku programu. (To se však stává velmi zřídka a často to může z dlouhodobého hlediska vést k noční můře ladění)
BEGIN
do_stuff();
EXCEPTION
WHEN OTHERS THEN
-- Ignore all exceptions and return control to calling block
NULL;
END;