sql >> Database >  >> RDS >> Oracle

Hoe regelnummer, procedurenaam in PL/SQL te achterhalen in geval van een fout

Ik ben dit patroon tegengekomen na veel onderzoek, hoofd bonzen en tandengeknars:

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;

De DBMS_UTILITY.FORMAT_ERROR_STACK functie lijkt de foutcode en het bericht te geven, en DBMS_UTILITY.FORMAT_ERROR_BACKTRACE lijkt een eerlijk tot goed stapelspoor te geven, compleet met regelnummers en opgeslagen procedurenamen in tenminste Oracle 10g.

Ik weet niet zeker of die functies beschikbaar zijn in Oracle 9i. Ik kon niet veel informatie over dit soort dingen vinden, zelfs niet voor Oracle 10g, dus ik dacht dat ik dit antwoord op zijn minst zou posten omdat 9i vrij oud is (en dus 10g wat dat betreft).



  1. het combineren van mysql AND OR-query's in Codeigniter

  2. Een tabel maken op basis van een query met een andere tabelruimte (Oracle SQL)

  3. Optimale manier om strings samen te voegen/te aggregeren

  4. Een PostgreSQL-database controleren