3

我的问题:如何查询 11g Oracle 数据库以获取错误代码的描述?

背景:有人告诉我,他们曾经看过可以查询 oracle 以获取有关特定ORA-code错误的详细信息的代码。我在谷歌上搜索了一段时间,似乎找不到类似的东西。有谁知道这是否可能?是否有 av$view 之类的?

原因:我想编写一个程序,该程序将返回我给它的错误代码的描述。所以当它写出来时,我可以这样称呼它:

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

它会输出:

Normal, successful completion.
Cause: An operation has completed normally, having met no exceptions.
Action: No action required.

或类似的东西:) 感谢您的帮助!

4

4 回答 4

8

它不能从 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命令并返回结果。这将为您提供更多数据,但显然会更加复杂。

于 2012-08-09T21:34:09.310 回答
2

您正在寻找SQLERRM函数。

于 2012-08-09T21:31:05.210 回答
2

从命令行

oerr ora <error number>

输出:

oerr ora 1501
01501, 00000, "CREATE DATABASE failed"
// *Cause:  An error occurred during create database
// *Action: See accompanying errors.
于 2012-08-09T21:38:22.670 回答
0

为了完整起见,我想指出,Oracle 文档确实包含所有错误的完整列表,而不仅仅是ORA那些错误。这些还包含解释和建议的操作,如oerr实用程序

我知道开发人员更喜欢编写查询而不是 RTFM。但如果你喜欢复古,你可以在这里找到它

于 2012-08-10T07:37:49.073 回答