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

Cómo averiguar el número de línea, el nombre del procedimiento en PL/SQL en caso de error

Me encontré con este patrón después de mucha investigación, golpes de cabeza y crujir de dientes:

CREATE OR REPLACE PACKAGE BODY my_schema.package_name
IS

  PROCEDURE foo
  IS
  BEGIN
    -- Call stored procedures/functions that throw unhandled exceptions
  EXCEPTION
    WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE('ERROR! - '
        || DBMS_UTILITY.FORMAT_ERROR_STACK
        || DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);
  END foo;

END;

El DBMS_UTILITY.FORMAT_ERROR_STACK la función parece dar el código y el mensaje de error, y DBMS_UTILITY.FORMAT_ERROR_BACKTRACE parece dar un seguimiento de la pila honesto a la bondad, completo con números de línea y nombres de procedimientos almacenados en Oracle 10g al menos.

No estoy seguro si esas funciones están disponibles en Oracle 9i. No pude encontrar mucha información sobre este tipo de cosas, incluso para Oracle 10g, así que pensé que al menos publicaría esta respuesta ya que 9i es bastante antiguo (y por lo tanto es 10g).