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.