Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment trouver le numéro de ligne, le nom de la procédure en PL/SQL en cas d'erreur

Je suis tombé sur ce modèle après de nombreuses recherches, des coups de tête et des grincements de dents :

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;

Le DBMS_UTILITY.FORMAT_ERROR_STACK la fonction semble donner le code d'erreur et le message, et DBMS_UTILITY.FORMAT_ERROR_BACKTRACE semble donner une trace de pile honnête, complète avec les numéros de ligne et les noms de procédures stockées dans Oracle 10g au moins.

Je ne sais pas si ces fonctions sont disponibles dans Oracle 9i. Je n'ai pas trouvé beaucoup d'informations sur ce genre de choses, même pour Oracle 10g, alors j'ai pensé que je posterais au moins cette réponse puisque 9i est assez vieux (et donc 10g d'ailleurs).