Въпреки че съм съгласен, че в 99% от случаите е лоша практика да се игнорират мълчаливо изключенията, без поне да се регистрират някъде, има конкретни ситуации, в които това е напълно приемливо.
В тези ситуации NULL е ваш приятел:
[...]
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
Две типични ситуации, при които игнорирането на изключения може да е желателно са:
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 обикновено не позволява тип обработка на изключения On Error Resume Next, известен от Visual Basic, където всички изключения се игнорират и програмата продължава да работи, сякаш нищо не се е случило (вижте При грешка възобновете следващия тип обработка на грешки в PL /SQL oracle ). Трябва изрично да включите потенциално неуспешни изрази във вложен блок.
2) Вашата процедура е толкова маловажна, че игнорирането на всички изключения, които тя хвърля, няма да повлияе на основната ви програмна логика. (Това обаче е много рядко и често може да доведе до кошмар за отстраняване на грешки в дългосрочен план)
BEGIN
do_stuff();
EXCEPTION
WHEN OTHERS THEN
-- Ignore all exceptions and return control to calling block
NULL;
END;