我的问题:您如何查询11g Oracle数据库以获取错误代码的描述?
背景:有人告诉我他们曾经看过一些代码,它会查询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.
或类似的东西:)感谢您的帮助!
答案 0 :(得分: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平台oerr上提供了一个实用程序,它提供了更多详细信息 - 特别是您正在寻找的原因和操作。如果您确实也想要这些数据,那么您可以编写一个调用操作系统shell的Java存储过程,执行oerr
命令并返回结果。这会给你更多的数据,但显然会更复杂。
答案 1 :(得分:2)
您正在寻找SQLERRM功能。
答案 2 :(得分:2)
从命令行
oerr ora <error number>
输出:
oerr ora 1501
01501, 00000, "CREATE DATABASE failed"
// *Cause: An error occurred during create database
// *Action: See accompanying errors.
答案 3 :(得分:0)
为了完整起见,我想指出Oracle文档确实包含所有错误的完整列表,而不仅仅是ORA
个错误。这些内容还包含解释和建议的操作like the oerr
utility。
我知道开发人员更喜欢编写查询而不是RTFM。但如果你想复古,你可以find it here。