【问题标题】:How to re-raise pl/sql exception in exception handling block?如何在异常处理块中重新引发 pl/sql 异常?
【发布时间】:2013-02-05 08:53:26
【问题描述】:

我有一些应用程序使用的以下过程:

procedure p1
is
begin
  bla bla bla;  
end;

但是没有异常处理块。所以应用程序是根据这个特性编写的。

现在我需要在 p1 中记录错误。但它不应该影响使用此过程的应用程序。

类似这样的:

procedure p1
is
begin
  bla bla bla;

  exception when others then
    log_error(sqlcode, sqlerrm);
    raise_new_exception (sqlcode, sqlerrm);
end;

如果出现 raise_application_error,第一个参数应在 [-20000, -20999] 范围内。所以如果出现no_data_found异常,就不会引发这个错误。

如果是exception_init,第二个参数不应该是可变的。它必须是数字文字。

PS:作为临时解决方案,我使用的是立即执行

【问题讨论】:

    标签: oracle exception-handling plsql


    【解决方案1】:

    如果您的错误仍然存​​在,请更改为

    ...
    exception when others then
      log_error(sqlcode, sqlerrm);
      raise;
    end;
    /
    

    这是解释in the documentation

    【讨论】:

    • @AlexPoole 链接失效。
    • @ceving - 谢谢,我已将当前的实时链接放入答案中,以便将来更容易更新。
    • 当前link
    • @McK - 谢谢;更新到当前的 11gR2 版本,这是它曾经指向的版本(而不是 9i 一个 loshad 链接到的版本)。
    • raise 的坏处是它消除了错误回溯:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-26
    • 1970-01-01
    • 2015-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多