Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Fragen Sie Oracle nach ORA-Code-Fehlerdetails ab

Es ist nicht von SQL aus zugänglich, aber innerhalb von PL/SQL können Sie den SQLERRM verwenden Funktion.

Zum Beispiel

SQL> ed
Wrote file afiedt.buf

  1  begin
  2    dbms_output.put_line( sqlerrm(0) );
  3    dbms_output.put_line( sqlerrm(-1041) );
  4* end;
SQL> /
ORA-0000: normal, successful completion
ORA-01041: internal error. hostdef extension doesn't exist

PL/SQL procedure successfully completed.

Sie könnten natürlich einen ora_code_desc erstellen Funktion, die einen String aufnahm, die ersten drei Zeichen entfernte und die resultierende Zahl an SQLERRM übergab , und gab das Ergebnis zurück

SQL> ed
Wrote file afiedt.buf

  1  create or replace function ora_code_desc( p_code in varchar2 )
  2    return varchar2
  3  is
  4    l_str varchar2(1000);
  5  begin
  6    l_str := sqlerrm( substr(p_code, 4 ) );
  7    return l_str;
  8* end;
SQL> /

Function created.

SQL> select ora_code_desc( 'ORA-00000' ) from dual;

ORA_CODE_DESC('ORA-00000')
--------------------------------------------------------------------------------
ORA-0000: normal, successful completion

Oracle liefert auch ein Dienstprogramm auf Unix-Plattformen oerr das liefert mehr Details – insbesondere die Ursache und Aktion, nach der Sie suchen. Wenn Sie diese Daten auch wirklich wollen, könnten Sie eine gespeicherte Java-Prozedur schreiben, die eine Betriebssystem-Shell aufruft und einen oerr ausführt Befehl und gab das Ergebnis zurück. Das würde Ihnen mehr Daten liefern, wäre aber natürlich viel komplexer.