salida - Oracle PL/SQL: cómo obtener el seguimiento de la pila, el nombre del paquete y el nombre del procedimiento
procedimientos y funciones oracle pl/sql (4)
A veces la excepción devuelve algo como: "ORA-06502: PL / SQL: error numérico o de valor: el búfer de cadena de caracteres es demasiado pequeño".
No es tan legible ya que no informa ni la tabla, la columna ni el valor que intentó escribir.
sería útil obtener el nombre del procedimiento actual en el momento en que ocurrió la Excepción o se detectó.
¿Cómo puedo obtener eso?
O podrías usar DBMS_DEBUG.PRINT_BACKTRACE
O prueba DBMS_UTILITY.FORMAT_CALL_STACK
Yo uso la combinación de DBMS_UTILITY.FORMAT_ERROR_STACK y DBMS_UTILITY.FORMAT_ERROR_BACKTRACE . (Mejorando la respuesta de Justin Cave)
when others then
Dbms_Output.put_line ( DBMS_UTILITY.FORMAT_ERROR_STACK() );
Dbms_Output.put_line ( DBMS_UTILITY.FORMAT_ERROR_BACKTRACE() );
Esto da el error en la primera línea y la pila en las siguientes líneas: (resultado del ejemplo dado por Justin Cave)
ORA-20001: Error 1
ORA-06512: at "SCOTT.X1", line 4
ORA-06512: at "SCOTT.X2", line 5
ORA-06512: at line 2
Probablemente desee la función DBMS_UTILITY.FORMAT_ERROR_BACKTRACE
SQL> ed
Wrote file afiedt.buf
1 create or replace procedure p1
2 is
3 begin
4 raise_application_error( -20001, ''Error 1'', true );
5* end;
SQL> /
Procedure created.
SQL> create or replace procedure p2
2 as
3 begin
4 null;
5 p1;
6 end;
7 /
Procedure created.
SQL> begin
2 p2;
3 exception
4 when others then
5 dbms_output.put_line( dbms_utility.format_error_backtrace );
6 end;
7 /
ORA-06512: at "SCOTT.P1", line 4
ORA-06512: at "SCOTT.P2", line 5
ORA-06512: at
line 2
PL/SQL procedure successfully completed.