No hay nada de malo en este fragmento de código si no desea que la excepción del bloque pl/sql se propague más, por ejemplo. Si lo haces a propósito, no es un código erróneo o un error. Esa es la captura todo en pl/sql. Y puede haber situaciones en el código donde haya anidado los bloques BEGIN/EXCEPTION/END y es posible que no desee que la transacción falle solo si falla una sección transversal particular del código. No puede indicar que es una codificación incorrecta si lo hace intencionalmente por cualquier razón/requisito.
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;
Usted quiere decir que la mala práctica aquí no es mediante el uso de "Otros Cuando un valor nulo", pero solamente * * usarlo, es decir, debe de existir la captura de cualquier otra excepción antes? – romaintaz
No, es malo usarlo alguna vez. al MENOS, cuando su cláusula otros debería registrar la excepción en alguna parte. pero lo más probable es que deba iniciar sesión y plantear la excepción –
@Matthew: No estoy de acuerdo. Hay una serie de escenarios perfectamente válidos en los que desearía captar todas las excepciones e ignorarlas. Si los registra o no depende de usted. Estoy de acuerdo en que 9 de cada diez veces querrías hacer algún tipo de logging, pero si estoy haciendo algún tipo de código de mejores esfuerzos en una API de bajo nivel usada con frecuencia, entonces probablemente me saltee los gastos generales de la registración . – darreljnz