它不能从 SQL 访问,但在 PL/SQL 中,您可以使用该SQLERRM
函数。
例如
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.
当然,您可以构建一个ora_code_desc
函数,该函数接受一个字符串,删除前三个字符,将结果数字传递给SQLERRM
,然后返回结果
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 还在 Unix 平台上提供了一个实用程序,它提供了更多详细信息,尤其是您正在寻找的原因和操作。如果您真的也想要这些数据,您可以编写一个 Java 存储过程,调用操作系统 shell,执行oerr
命令并返回结果。这将为您提供更多数据,但显然会更加复杂。