sql >> Base de Datos >  >> RDS >> Oracle

Manejo de excepciones en Procedimiento con funciones anidadas en pl/sql

El RAISE_APPLICATION_ERROR procedimiento tiene un tercer parámetro que controla si la excepción reemplaza la pila de excepciones actual (el comportamiento predeterminado) o se agrega a ella.

Entonces, si lo pasas TRUE mostrará ambos mensajes; en la llamada de su procedimiento:

...
EXCEPTION
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR (-20101, 'Problem in loading Affected Circle data',
  TRUE);
END;

te da la salida:

BEGIN
*
ERROR at line 1:
ORA-20101: Problem in loading Affected Circle data
ORA-06512: at "SRUSER.ADD_AFFECTEDCIRCLE", line 13
ORA-20102: Circle Code is wrong or not available
ORA-06512: at line 2

Para mostrar solo los mensajes y no la otra información de la pila, necesitaría manipular la pila. Este artículo toca cómo usar format_error_backtrace para extraer la información que le interesa, pero desafortunadamente el enlace a BT el paquete está muerto. Algo del mismo terreno está cubierto aquí . Básicamente, debe analizar la cadena de excepción en líneas y mostrar solo aquellas que comienzan con ORA-20% , creo.

Pero tenga cuidado con la pérdida de información que en realidad podría ser vital. En particular, le sugiero que atrape solo los errores específicos que está buscando, no OTHERS - déjalo así para que puedas lidiar con errores inesperados y no ocultar algo importante.