我有一个问题,那就是什么时候我可以在异常块中使用when OTHERS子句,而不会使我的代码出错。据我所知,强烈建议尽可能避免这种做法。下面是我的案例:
我有一个遍历游标并将游标中的一些数据插入到表中的脚本。
现在,在这个循环中,我使用了一个函数,如果我试图插入不正确的数据,它会引发异常。因此,当循环命中不正确的记录时,循环就会中断,脚本就会停止执行。我需要做的是注意到数据不能被插入并从游标转到下一条记录。为了做到这一点,我在循环中使用了异常块,它在其他人的时候捕获异常,通过DBMS_output.put_line给出一条消息,并转到下一条记录。
这是一个好方法吗?若否,应如何处理?谢谢你的建议。
发布于 2013-04-03 22:21:46
使用DBMS_OUTPUT进行错误处理几乎从来都不是一个好主意。下面是一些建议(所有建议都使用某种表结构来存储“无效”行):
就我个人而言,如果你的函数可以从SQL调用,我会选择3)。
发布于 2013-04-03 22:20:24
不推荐的东西并不意味着你不能在合适的时候使用它。如果这符合您的要求,并且速度不是太慢,那么不用担心。你可能会花费三倍的时间来创建一个稍微更优雅的解决方案,这可能是你可以用在其他事情(或某人)上的时间。
发布于 2017-05-16 01:05:50
任何WHEN OTHERS处理程序中的最后一行都应该被提升;
当其他人应该为意外的行为保留时,它应该会使你的程序崩溃。它永远不应该被用作例程处理逻辑的一部分。正确的方法是确定函数返回的是什么错误。然后您的调用程序需要显式地处理那个/那些错误。你的问题可能实际上是这个函数做了一些愚蠢的事情,而其他人也是如此。
http://stevenfeuersteinonplsql.blogspot.com/2017/02/now-not-to-handle-exceptions.html
https://stackoverflow.com/questions/15789076
复制相似问题