Obwohl ich zustimme, dass es in 99% der Fälle eine schlechte Praxis ist, Ausnahmen stillschweigend zu ignorieren, ohne sie zumindest irgendwo zu protokollieren, gibt es bestimmte Situationen, in denen dies durchaus akzeptabel ist.
In diesen Situationen ist NULL Ihr Freund:
[...]
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
Zwei typische Situationen, in denen das Ignorieren von Ausnahmen wünschenswert sein könnte, sind:
1) Ihr Code enthält eine Anweisung, von der Sie wissen, dass sie gelegentlich fehlschlägt, und Sie möchten nicht, dass diese Tatsache Ihren Programmablauf unterbricht. In diesem Fall sollten Sie Ihre Anweisung in einen verschachtelten Block einschließen, wie das folgende Beispiel zeigt:
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;
Beachten Sie, dass PL/SQL im Allgemeinen nicht die aus Visual Basic bekannte Art der Ausnahmebehandlung On Error Resume Next zulässt, bei der alle Ausnahmen ignoriert werden und das Programm weiterläuft, als ob nichts passiert wäre (siehe Bei Fehler die nächste Art der Fehlerbehandlung in PL fortsetzen /SQL-Orakel ). Potenziell fehlerhafte Anweisungen müssen explizit in einen verschachtelten Block eingeschlossen werden.
2) Ihre Prozedur ist so unwichtig, dass das Ignorieren aller Ausnahmen, die sie auslöst, Ihre Hauptprogrammlogik nicht beeinflusst. (Dies ist jedoch sehr selten der Fall und kann auf lange Sicht oft zu einem Debugging-Albtraum führen)
BEGIN
do_stuff();
EXCEPTION
WHEN OTHERS THEN
-- Ignore all exceptions and return control to calling block
NULL;
END;