tipos salida procedimientos procedimiento parametros funciones example español ejecutar developer con bloques bloque anonimo almacenado 11g oracle exception-handling plsql stack-trace

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?




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.