Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 查询Oracle以获取ORA代码错误详细信息_Sql_Oracle_Error Handling - Fatal编程技术网

Sql 查询Oracle以获取ORA代码错误详细信息

Sql 查询Oracle以获取ORA代码错误详细信息,sql,oracle,error-handling,Sql,Oracle,Error Handling,我的问题:如何查询11g Oracle数据库以获取错误代码的描述 背景:有人告诉我,他们曾见过一段代码,该代码会向oracle查询特定oracode错误的详细信息。我在谷歌上搜索了一段时间,似乎找不到类似的东西。有人知道这是否可能吗?有v$视图吗 原因:我想写一个过程,返回我给它的错误代码描述。所以当它写下来的时候,我可以这样称呼它: select ora_code_desc('ORA-00000') from dual; 它将输出: Normal, successful completion

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

背景:有人告诉我,他们曾见过一段代码,该代码会向oracle查询特定
oracode
错误的详细信息。我在谷歌上搜索了一段时间,似乎找不到类似的东西。有人知道这是否可能吗?有v$视图吗

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

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.

或者类似的:)谢谢你的帮助

您正在寻找该函数。

它无法从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\u code\u 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
命令,然后返回结果。这将为您提供更多数据,但显然要复杂得多。

从命令行

oerr ora <error number>

为了完整起见,我想指出,Oracle文档确实包含所有错误的完整列表,而不仅仅是
ORA
错误。其中还包括解释和建议的行动


我知道开发人员更喜欢编写查询而不是RTFM。但如果你想成为复古者,你可以。

这是像贾斯汀·凯夫一样使用oerr的方法。对不起,我没有看到贾斯汀的答案。要增加价值,您还可以查看Oracle仅提供的带有Unix(和Linux)风格的oerr。尽管热心的志愿者们已经为Windows的版本写过书。嘿,贾斯汀,你知道有什么东西可以为
AMD
错误或
NNO
或任何
oerr ora 1501
01501, 00000, "CREATE DATABASE failed"
// *Cause:  An error occurred during create database
// *Action: See accompanying errors.