Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak znaleźć numer linii, nazwę procedury w PL/SQL w przypadku błędu?

Natknąłem się na ten wzór po wielu badaniach, uderzaniu głową i zgrzytaniu zębami:

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;

DBMS_UTILITY.FORMAT_ERROR_STACK funkcja wydaje się podawać kod błędu i komunikat, a DBMS_UTILITY.FORMAT_ERROR_BACKTRACE wydaje się dawać uczciwy i dobry ślad stosu, wraz z numerami wierszy i nazwami procedur składowanych przynajmniej w Oracle 10g.

Nie jestem pewien, czy te funkcje są dostępne w Oracle 9i. Nie mogłem znaleźć wielu informacji na ten temat, nawet dla Oracle 10g, więc pomyślałem, że przynajmniej opublikuję tę odpowiedź, ponieważ 9i jest dość stary (a więc jest to 10g).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wstawianie do dwóch tabel wyroczni z sekwencją

  2. Masz tabelę Oracle o nazwie słowo zastrzeżone, jakie problemy mogą się pojawić?

  3. jak wybrać tylko wiersz z sekwencją max bez użycia podzapytania?

  4. ORA-01031:niewystarczające uprawnienia podczas wybierania widoku

  5. Wartości nie są wyświetlane z wiodącym zerem w Oracle