Embora eu concorde que 99% das vezes é uma má prática ignorar silenciosamente as exceções sem pelo menos registrá-las em algum lugar, existem situações específicas em que isso é perfeitamente aceitável.
Nessas situações, NULL é seu amigo:
[...]
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
Duas situações típicas em que ignorar exceções pode ser desejável são:
1) Seu código contém uma instrução que você sabe que falhará ocasionalmente e você não deseja que esse fato interrompa o fluxo do programa. Nesse caso, você deve colocar sua instrução em um bloco aninhado, como mostra o exemplo a seguir:
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;
Observe que a PL/SQL geralmente não permite o tipo On Error Resume Next de tratamento de exceção conhecido do Visual Basic, onde todas as exceções são ignoradas e o programa continua a ser executado como se nada tivesse acontecido (consulte Em caso de erro, retome o próximo tipo de tratamento de erro em PL /oráculo SQL ). Você precisa incluir explicitamente instruções potencialmente com falha em um bloco aninhado.
2) Seu procedimento é tão sem importância que ignorar todas as exceções que ele lança não afetará a lógica do programa principal. (No entanto, isso raramente é o caso e muitas vezes pode resultar em um pesadelo de depuração a longo prazo)
BEGIN
do_stuff();
EXCEPTION
WHEN OTHERS THEN
-- Ignore all exceptions and return control to calling block
NULL;
END;