Non c'è niente di sbagliato in questo snippet di codice se non si desidera che l'eccezione del blocco pl/sql si propaghi ulteriormente, ad esempio. Se lo fai apposta, non è un codice errato o un errore. Questo è il trucco tutto in pl/sql. E potrebbero esserci situazioni nel codice in cui sono nidificati blocchi BEGIN/EXCEPTION/END e si potrebbe non volere che la transazione fallisca solo se una particolare sezione trasversale di codice fallisce. Non puoi dire che è una cattiva programmazione se lo fai intenzionalmente per qualsiasi motivo/esigenza.
BEGIN
--something important here
--something even more important here
BEGIN
--something secondary goes here but not important enough to stop the process or
--log a message about it either
--maybe send an informative email to the support group or
--insert a log message when debugging the process or
--the list could go on and on here
EXCEPTION
--I don't care if this block fails, absorbing all errors regardless of type
WHEN OTHERS THEN NULL;
END;
-- something super important here, must happen
EXCEPTION
WHEN NO_DATA_FOUND THEN
-- do something useful for this exception
WHEN OTHERS THEN
-- do something by default if we don't expect this error
END;
fonte
2014-08-16 21:48:58
Vuoi dire che la pratica male qui non è quello di utilizzare "Quando Altri Poi Null", ma * solo * con esso, vale a dire la cattura whitout qualsiasi altra eccezione prima? – romaintaz
No, è male usarlo mai. al MOLTO, la tua clausola quando altri dovrebbe registrare l'eccezione da qualche parte. ma molto probabilmente dovresti registrare e sollevare l'eccezione –
@Matthew: non sono d'accordo. Esistono numerosi scenari perfettamente validi in cui si desidera rilevare tutte le eccezioni e ignorarle. Che tu li acceda o meno dipende da te. Sono d'accordo che 9 volte su dieci vorresti fare un qualche tipo di registrazione, ma se sto facendo un qualche tipo di codice best-effort in un'API di basso livello usata frequentemente, probabilmente salterò i costi generali di registrazione . – darreljnz