2012-08-09 80 views
2

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

背景:有人告诉我他们曾经看过一次代码,它会向oracle查询有关特定ORA-code错误的详细信息。我一直在Google上搜索一段时间,似乎无法找到类似的东西。有谁知道这是否可能?有没有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. 

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

回答

7

它不能从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平台oerr上提供了一个实用程序,它提供了更多详细信息 - 尤其是您要查找的原因和操作。如果您真的需要这些数据,则可以编写一个调用到操作系统shell的Java存储过程,执行oerr命令并返回结果。这会给你更多的数据,但显然会更复杂。

+0

嗨贾斯汀,你知道一些可能给出'AMD'错误或者'NNO'或者任何[其他](http://www.ora-code.com/) – kentcdodds 2012-08-09 22:58:15

+0

的错误信息。 [question](http://stackoverflow.com/questions/11893245) – kentcdodds 2012-08-09 23:04:20

2

从命令行

oerr ora <error number> 

输出:

oerr ora 1501 
01501, 00000, "CREATE DATABASE failed" 
// *Cause: An error occurred during create database 
// *Action: See accompanying errors. 
+0

这就是使用像贾斯汀洞穴[提及](http://stackoverflow.com/a/11892275/971592) – kentcdodds 2012-08-09 21:40:47

+0

对不起,我没有看到贾斯汀的答案。为了增加价值,你也可以查阅 – 2012-08-09 23:53:13

+0

Oracle只运行带有Unix(和Linux)风格的'oerr'。虽然渴望志愿者已经为Windows版本编写。 – APC 2012-08-10 07:30:49

0

在完整性的利益,我想指出的是,Oracle文档不包含所有错误的完整列表,而不是只是ORA的。这些也包含解释和建议的行动like the oerr utility

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