Oracle
 sql >> Base de données >  >> RDS >> Oracle

Interroger Oracle pour les détails de l'erreur de code ORA

Il n'est pas accessible depuis SQL mais dans PL/SQL, vous pouvez utiliser le SQLERRM fonction.

Par exemple

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.

Vous pouvez, bien sûr, construire un ora_code_desc fonction qui a pris une chaîne, supprimé les trois premiers caractères, passé le nombre résultant à SQLERRM , et a renvoyé le résultat

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 livre également un utilitaire sur les plateformes Unix oerr qui fournit plus de détails, en particulier la cause et l'action que vous recherchez. Si vous voulez vraiment ces données aussi, vous pouvez écrire une procédure stockée Java qui appelle un shell de système d'exploitation, exécute un oerr commande et a renvoyé le résultat. Cela vous donnerait plus de données mais serait évidemment beaucoup plus complexe.