有没有办法在 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 中的全局异常处理