Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como descobrir o número da linha, nome do procedimento em PL/SQL em caso de erro


Eu me deparei com esse padrão depois de muita pesquisa, batendo cabeça e rangendo de dentes:
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;

O DBMS_UTILITY.FORMAT_ERROR_STACK função parece dar o código de erro e mensagem, e DBMS_UTILITY.FORMAT_ERROR_BACKTRACE parece dar um rastreamento de pilha honesto, completo com números de linha e nomes de procedimentos armazenados no Oracle 10g, pelo menos.

Não tenho certeza se essas funções estão disponíveis no Oracle 9i. Não consegui encontrar muitas informações sobre esse tipo de coisa, mesmo para o Oracle 10g, então pensei em pelo menos postar essa resposta, já que 9i é bastante antigo (e, portanto, 10g).