首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用"WHEN OTHERS“

使用"WHEN OTHERS“
EN

Stack Overflow用户
提问于 2013-04-03 21:44:59
回答 3查看 65关注 0票数 0

我有一个问题,那就是什么时候我可以在异常块中使用when OTHERS子句,而不会使我的代码出错。据我所知,强烈建议尽可能避免这种做法。下面是我的案例:

我有一个遍历游标并将游标中的一些数据插入到表中的脚本。

现在,在这个循环中,我使用了一个函数,如果我试图插入不正确的数据,它会引发异常。因此,当循环命中不正确的记录时,循环就会中断,脚本就会停止执行。我需要做的是注意到数据不能被插入并从游标转到下一条记录。为了做到这一点,我在循环中使用了异常块,它在其他人的时候捕获异常,通过DBMS_output.put_line给出一条消息,并转到下一条记录。

这是一个好方法吗?若否,应如何处理?谢谢你的建议。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-03 22:21:46

使用DBMS_OUTPUT进行错误处理几乎从来都不是一个好主意。下面是一些建议(所有建议都使用某种表结构来存储“无效”行):

  1. 不写输出,而是将记录存储在PL/SQL表中,并将循环替换为
  2. ..SAVE EXCEPTIONS
  3. 使用普通的SQL INSERT,与错误行的错误表相结合(使用dbms_errlog创建错误表)

就我个人而言,如果你的函数可以从SQL调用,我会选择3)。

票数 4
EN

Stack Overflow用户

发布于 2013-04-03 22:20:24

不推荐的东西并不意味着你不能在合适的时候使用它。如果这符合您的要求,并且速度不是太慢,那么不用担心。你可能会花费三倍的时间来创建一个稍微更优雅的解决方案,这可能是你可以用在其他事情(或某人)上的时间。

票数 0
EN

Stack Overflow用户

发布于 2017-05-16 01:05:50

任何WHEN OTHERS处理程序中的最后一行都应该被提升;

当其他人应该为意外的行为保留时,它应该会使你的程序崩溃。它永远不应该被用作例程处理逻辑的一部分。正确的方法是确定函数返回的是什么错误。然后您的调用程序需要显式地处理那个/那些错误。你的问题可能实际上是这个函数做了一些愚蠢的事情,而其他人也是如此。

http://stevenfeuersteinonplsql.blogspot.com/2017/02/now-not-to-handle-exceptions.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15789076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档