我有一个问题,我什么时候可以在EXCEPTION块中使用WHEN OTHERS子句而不会让我的代码出错。据我所知,强烈建议尽可能避免这种做法。这是我的情况:
我有一个循环光标的脚本,并将光标中的一些数据插入到表中。
现在,在这个循环中,我正在使用一个函数,如果我试图插入不正确的数据,则会引发异常。因此,当循环命中记录时,不正确的循环中断并且脚本执行停止。我需要做的是注意无法插入数据并从光标转到下一条记录。为此,我在循环中得到异常块,在WHEN OTHERS中捕获异常,通过DBMS_output.put_line发出消息并转到下一条记录。
这是一个很好的方法吗?如果没有,应该怎么做?
谢谢你的任何建议。
答案 0 :(得分:4)
使用DBMS_OUTPUT进行错误处理几乎不是一个好主意。以下是一些建议 (所有这些都使用某种表结构来存储“无效”行):
就个人而言,如果可以从SQL调用你的函数,我会去3)。
答案 1 :(得分:0)
仅仅因为不推荐某些东西,并不意味着你在适当的时候不能使用它。如果这符合您的要求并且速度不是太慢,那么请不要担心。您可能会花费三倍的时间来创建一个稍微优雅的解决方案,时间可能会用在其他东西上(或其他人)。
答案 2 :(得分:0)
任何WHEN OTHERS处理程序中的最后一行应该是RAISE;
当其他人应该被保留用于意外行为时,它应该会导致程序崩溃。它永远不应该用作例程处理逻辑的一部分。 对此的正确方法是确定函数返回的错误。然后你的调用程序需要显式处理那些/那些错误。你的问题实际上可能就是这个功能正在和其他人一起做些什么。
http://stevenfeuersteinonplsql.blogspot.com/2017/02/now-not-to-handle-exceptions.html