繁体   English   中英

每个存储过程都应该有一个异常块吗?

[英]Should Every Stored Procedure Have an Exception Block?

我有一个运行Oracle 11数据库的客户端。 此客户端的DBA坚持认为,添加到数据库中的每个存储过程都包含一个异常处理程序(即使该存储过程只是执行SELECT)。 这有道理吗? 我们网站上的数据层已经具有内置的异常处理和日志记录(效果很好)。 数据层是用.NET编写的。

我已经告诉DBA,只有在发生错误(例如事务回滚)时可以采取某些特定措施,或者可能发生一些可预见的错误时,才需要使用异常处理程序。

他坚持认为每个存储程序都有一个异常块。

任何关于这是一种好的做法还是需要的做法的意见都将受到赞赏。

谢谢!

我无法满足这可能满足的任何Oracle特定需求。 也许有些DBA知道我们不知道吗?

但是,总的来说,你是对的。 只有在可以有意义地处理异常的地方才需要使用异常处理程序。 如果此时在逻辑上没有什么可以做的,那么就没有理由捕获异常。 (我想知道,如果异常处理块只重新抛出,则DBA的要求是否可以满足?)

话虽如此,遵循拥有特定系统的团队所制定的编码标准,还是需要一定的谨慎。 那是...这是值得一战吗? (以我个人的经验,而不是普遍适用的经验,这与DBA的战斗特别艰巨。 尤其是负责恐龙(如Oracle或DB2)的DBA。但是要花些力气。)

在这种情况下,一个很好的折衷办法可能是与DBA坐下来讨论他/她期望异常处理程序要做什么 从逻辑上协作确定如何在此特定存储过程中有意义地处理异常。 DBA可能会发现对它的需求减少了,或者相反,您可能会发现对它没有考虑的需求。 无论哪种方式,这都是一个很好的机会,因为它适用于特定情况,所以可以理解否则会粗略表达的一揽子规则。

这与在Java中何时使用检查的异常与未检查的异常类似。 可能是一种见解,但是在我看来,您已经说过一个很好的起点:如果有解决方法,请抓住异常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM