sql >> Databáze >  >> RDS >> Oracle

Zeptejte se Oracle na podrobnosti o chybě kódu ORA

Není přístupný z SQL, ale v rámci PL/SQL můžete použít SQLERRM funkce.

Například

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.

Můžete samozřejmě vytvořit ora_code_desc funkce, která přijala řetězec, odstranila první tři znaky a předala výsledné číslo do SQLERRM a vrátil výsledek

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 také dodává nástroj pro platformy Unix oerr která poskytuje více podrobností – zejména příčinu a akci, kterou hledáte. Pokud opravdu chcete i tato data, můžete napsat uloženou proceduru Java, která vyvolá shell operačního systému a spustí oerr příkaz a vrátil výsledek. To by vám poskytlo více dat, ale bylo by to samozřejmě mnohem složitější.



  1. Obecné procházení stromu (nekonečno) způsobem prohledávání do šířky

  2. Přehled jedinečných omezení serveru SQL Server

  3. Odstraňování problémů Oracle - zablokovaný proces

  4. Jak uložit BLOB jako soubor v PL/SQL?