我有一个运行Oracle 11数据库的客户端。此客户端的DBA坚持认为添加到数据库的每个存储过程都包含一个异常处理程序(即使sproc只执行SELECT)。这有意义吗?我们在网站上的数据层已经内置了异常处理和日志记录(效果很好)。数据层是用.NET编写的。
我告诉DBA,只有在出现错误(如事务回滚)或可能发生某些可预测错误时才能采取某些特定操作时,才会调用异常处理程序。
他坚持认为每个sproc都有一个异常块。
对于这是一个好的还是需要的做法的任何意见将不胜感激。
谢谢!
答案 0 :(得分:2)
我无法满足任何特定于Oracle的需求,这可能令人满意。也许DBA知道我们没有?
但是,一般来说,你是对的。只有在有意义地处理异常的情况下才需要异常处理程序。如果在代码中的那一点上没有任何可以逻辑完成的东西,那么就没有理由捕获异常。 (我想......如果异常处理块除了重新抛出之外什么也不做,那么DBA的要求会得到满足吗?)
现在,尽管如此,还有一定程度的谨慎是遵循拥有特定系统的团队制定的编码标准。那是......这场战斗值得拥有吗? (在我自己的个人和不是普遍适用的体验中,这是与DBA特别艰苦的斗争。特别是掌管Oracle等恐龙的DBA DB2。但是要带上一点点盐。)
在这样的情况下做出妥协可能是与DBA坐下来讨论他/她期望做的异常处理程序。在协作上逻辑确定如何有意义地处理此特定存储过程中的异常。 DBA可能会发现对它的需求较少,或者相反,您可能会发现您没有考虑过它的需求。无论哪种方式,这都是一个很好的机会,可以了解一个粗略表达的一揽子规则,因为它适用于特定情况。
答案 1 :(得分:1)
这与在Java中使用已检查异常与未经检查的异常的时间类似。这可能是一个意见问题,但在我看来,一个很好的起点就是你已经说过的:如果有一种方法可以解决这个问题,请抓住例外。