暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 无法在日志记录表中存储no_data_found异常

askTom 2017-07-11
203

问题描述

嗨,

当我传递一个输入参数时,我有一个存储过程。使用该输入参数,如果有no_data_found,那么我正在尝试在该错误日志表中存储no_data_found错误,但我无法做到这一点。请在下面找到我的代码,

存储过程:

create or replace procedure dumm_proc (p_opportunity_number cct_opportunity.opportunity_number%type)
as

v_oppo_id varchar2(50);
l_message varchar2(50) := sqlerrm;
l_code varchar2(50) := sqlcode;

begin

select opportunity_id into v_oppo_id 
from cct_opportunity
where opportunity_number =  p_opportunity_number;


exception
when no_data_found then
xxcct_error_logs(cct_error_seq.nextval,null,v_oppo_id,null,null,l_message,l_code,'dumm_proc',null,sysdate,user,sysdate,user);
raise;

when others then
xxcct_error_logs(cct_error_seq.nextval,null,v_oppo_id,null,null,l_message,l_code,'dumm_proc',null,sysdate,user,sysdate,user);
raise;
end;


使用另一个错误日志过程 (xxcct_error_logs) 将值存储到表中,但始终以正常,成功完成的方式存储。

请建议如何通过调用error_logs过程来存储no_data_found错误。

萨克斯。

专家解答

您可以在过程开始时将值分配给l_code和l_message。当一切都好的时候。所以当你在异常处理程序中引用这些时,它们仍然有这些值!

要获取错误信息,您需要在异常块本身中调用sqlerrm和sqlcode:

declare

  l_message varchar2(50) := sqlerrm;
  l_code varchar2(50) := sqlcode;

begin
  dbms_output.put_line(l_code || ' ' || l_message);
  raise no_data_found;

exception
  when no_data_found then
    dbms_output.put_line(l_code || ' ' || l_message);
    dbms_output.put_line(sqlcode || ' ' || sqlerrm);
end;
/

0 ORA-0000: normal, successful completion
0 ORA-0000: normal, successful completion
100 ORA-01403: no data found

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论