oracle存储过程,如何获得详细的错误信息

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle存储过程,如何获得详细的错误信息相关的知识,希望对你有一定的参考价值。

存储过程示例如下:
create or replace procedure proc_test( strAge in string, strName in string, ret_code out string, v_error_message out string) is
begin
declare
strsql varcchar(1024);
begin

strsql :='select name from student where age=100';
execute immediate strsql using strAge ;

strsql :='select age from teacher where name=jill';
execute immediate strsql using strName ;

ret_code:=0;
v_error_message:='OK';
EXCEPTION
WHEN OTHERS THEN
ret_code := sqlcode;
v_error_message := sqlerrm;
rollback;

end;
end proc_cancel_digital_id;

上面的存储过程是例子。
上面的任何一个select执行时,如果查不到数据都会抛异常。数据库返回码是100,找不到数据。
但是我想获得详细的错误信息,到底是上面的student找不到记录,还是teacher表找不到记录,请问这里要怎么做?谢谢

参考技术A create or replace procedure proc_test( strAge in string, strName in string, ret_code out string, v_error_message out string) is
begin
declare
strsql varcchar(1024);
v_error_desc varcchar(1024);
begin
v_error_desc :='student';
strsql :='select name from student where age=100';
execute immediate strsql using strAge ;

v_error_desc :='teacher';
strsql :='select age from teacher where name=jill';
execute immediate strsql using strName ;

ret_code:=0;
v_error_desc :='OK';
v_error_message:='OK';
EXCEPTION
WHEN OTHERS THEN
ret_code := sqlcode;
v_error_desc := '错误位置:' || v_error_desc;
v_error_message := sqlerrm;
rollback;

end;
end proc_cancel_digital_id;本回答被提问者采纳
参考技术B 推荐你去猎豹IT网校上,有个oracle视频教程,看看是否学一下自己就能处理了。 参考技术C 用Oracle的企业管理器EM,在那个里面运行PL/SQL就能看到错误的具体信息了追问

我这个存储过程是c语言调用的,我希望错误能够定位更准确一些,是查询那个表的时候错误了,这样可以C语言获得存储过程的返回信息,输出到日志,将来定位时很方便。

追答

你上网找找返回Oracle异常信息ORA号的函数吧,找到ORA号就能找到相应的错误信息了,具体怎么弄没试过

以上是关于oracle存储过程,如何获得详细的错误信息的主要内容,如果未能解决你的问题,请参考以下文章

请教各位高手 oracle 存储过程 如何获得 捕获异常的内容

从 C# 调用 Oracle 存储过程?

oracle 添加一个计划任务 每天凌晨两点 定时执行一个存储过程 求详细步骤!!急!!

oracle 存储过程详细介绍(创建,删除存储过程,参数传递等)

oracle存储过程如何输出信息

oracle存储过程提示编译完成但存在错误,如何查看错误