有没有办法在 PLSQL 包中全局处理定义的异常

Posted

技术标签:

【中文标题】有没有办法在 PLSQL 包中全局处理定义的异常【英文标题】:Is there any way to handle a defined exception globally in a PLSQL package 【发布时间】:2014-12-04 23:46:43 【问题描述】:

我正在编写一个包含多个过程的 PLSQL 包,其中任何一个都可以生成我定义的异常,并且我已经在每个过程中处理了该异常。因此;

package BODY pkg 
  PROCEDURE first
  BEGIN
  .....
  EXCEPTION
    WHEN foobar ...
  END first;

  PROCEDURE second
  BEGIN
  .....
  EXCEPTION
    WHEN foobar ...
  END second;
END pkg;

而且它有效。

但是,有没有办法定义一个异常处理程序,当它在包内的任何过程中引发时处理“foobar”,所以每个过程不需要一个异常部分来处理 foobar 条件?实际代码大约有十几个过程。

【问题讨论】:

否,除非您在每个过程调用之上添加另一个“集线器”过程作为接收层。 我希望如此,但这比工作更有价值。谢谢你,塞巴斯。 不管怎样,做你正在做的事情可能没问题。现实世界的场景是什么? 我不认为有这样的事情。也许您可以将引发该异常的逻辑封装在一个过程中,并始终从其他过程中调用该过程... 【参考方案1】:

我会将通用代码移动到单个例程中,例如:

  package BODY pkg 

  PROCEDURE foobar_handler IS
  BEGIN
  .....
  END foobar_handler;

  PROCEDURE first
  BEGIN
  .....
  EXCEPTION
    WHEN foobar THEN foobar_handler;
  END first;

  PROCEDURE second
  BEGIN
  .....
  EXCEPTION
    WHEN foobar THEN foobar_handler;
  END second;
END pkg;

【讨论】:

以上是关于有没有办法在 PLSQL 包中全局处理定义的异常的主要内容,如果未能解决你的问题,请参考以下文章

Django-rest-framework 中的全局异常处理

用于检索自定义消息而不是异常详细信息的 PLSQL 异常处理

iOS - 全局异常处理程序

SQL记录-PLSQL异常

SpringBoot——全局异常处理

Xamarin.Forms 中的全局异常处理