Hoewel ik het ermee eens ben dat het 99% van de tijd een slechte gewoonte is om uitzonderingen stilzwijgend te negeren zonder ze op zijn minst ergens te loggen, zijn er specifieke situaties waarin dit volkomen acceptabel is.
In deze situaties is NULL je vriend:
[...]
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
Twee typische situaties waarin het negeren van uitzonderingen wenselijk kan zijn, zijn:
1) Uw code bevat een instructie waarvan u weet dat deze af en toe zal mislukken en u wilt niet dat dit feit uw programmastroom onderbreekt. In dit geval moet u uw instructie insluiten in een genest blok, zoals het volgende voorbeeld laat zien:
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;
Merk op dat PL/SQL over het algemeen geen On Error Resume Next type uitzonderingsbehandeling toestaat die bekend is van Visual Basic, waarbij alle uitzonderingen worden genegeerd en het programma blijft draaien alsof er niets is gebeurd (zie Bij fout hervatten volgende type foutafhandeling in PL /SQL orakel ). Je moet potentieel falende statements expliciet insluiten in een genest blok.
2) Uw procedure is zo onbelangrijk dat het negeren van alle uitzonderingen die het veroorzaakt, geen invloed heeft op uw hoofdprogrammalogica. (Dit is echter zeer zelden het geval en kan op de lange termijn vaak leiden tot een nachtmerrie bij het opsporen van fouten)
BEGIN
do_stuff();
EXCEPTION
WHEN OTHERS THEN
-- Ignore all exceptions and return control to calling block
NULL;
END;