Si bien estoy de acuerdo en que el 99 % de las veces es una mala práctica ignorar silenciosamente las excepciones sin al menos registrarlas en alguna parte, hay situaciones específicas en las que esto es perfectamente aceptable.
En estas situaciones, NULL es tu amigo:
[...]
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
Dos situaciones típicas en las que puede ser deseable ignorar las excepciones son:
1) Su código contiene una declaración que sabe que fallará ocasionalmente y no quiere que este hecho interrumpa el flujo de su programa. En este caso, debe encerrar su declaración en un bloque anidado, como muestra el siguiente ejemplo:
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;
Tenga en cuenta que PL/SQL generalmente no permite el tipo de manejo de excepciones On Error Resume Next conocido de Visual Basic, donde todas las excepciones se ignoran y el programa continúa ejecutándose como si nada (consulte En caso de error, reanude el siguiente tipo de manejo de errores en PL /SQL oráculo ). Debe encerrar explícitamente las declaraciones potencialmente fallidas en un bloque anidado.
2) Su procedimiento es tan poco importante que ignorar todas las excepciones que arroja no afectará la lógica de su programa principal. (Sin embargo, este es el caso muy rara vez y, a menudo, puede resultar en una pesadilla de depuración a largo plazo)
BEGIN
do_stuff();
EXCEPTION
WHEN OTHERS THEN
-- Ignore all exceptions and return control to calling block
NULL;
END;