内容简介:http://stackoverflow.com/questions/27566867/pl-sql-exception-handling-do-nothing-ignore-exception
这是一个我经常被问到的问题.由于我在stackoverflow上找不到任何确切的重复,我以为我会把它作为参考.
题:
在PL / SQL中,我知道捕获异常并执行代码,以及如何将它们传播到调用块.
例如,在以下过程中,NO_DATA_FOUND异常被直接处理,而所有其他异常都被调用到调用块:
CREATE OR REPLACE PROCEDURE MY_PROCEDURE()
IS
BEGIN
do_stuff();
EXCEPTION
WHEN NO_DATA_FOUND THEN
-- Do something
handle_exception();
WHEN OTHERS THEN
-- Propagate exception
RAISE;
END;
但是我应该使用什么命令来忽略一个或所有引发的异常并将执行控制返回到调用块?
虽然我同意99%的时间是不好的做法,默默地忽略异常,而不是至少将它们记录在某个地方,但是具体情况是完全可以接受的.
在这些情况下,NULL是你的朋友:
[...]
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
忽略例外可能需要的两种典型情况是:
1)您的代码包含一个您知道的语句可能会偶尔失败,您不希望此事件中断您的程序流程.
在这种情况下,您应该将嵌套的语句包含在嵌套块中,如下例所示:
CREATE OR REPLACE PROCEDURE MY_PROCEDURE()
IS
l_empoyee_name EMPLOYEES.EMPLOYEE_NAME%TYPE;
BEGIN
-- Catch potential NO_DATA_FOUND exception and continue
BEGIN
SELECT EMPLOYEE_NAME
INTO l_empoyee_name
FROM EMPLOYEES
WHERE EMPLOYEE_ID = 12345;
EXCEPTION
WHEN NO_DATA_FOUND THEN
NULL;
WHEN OTHERS THEN
RAISE;
END;
do_stuff();
EXCEPTION
WHEN OTHERS THEN
-- Propagate exception
RAISE;
END;
请注意,PL / SQL通常不允许从Visual Basic知道的“错误恢复继续”类型的异常处理,其中所有异常都被忽略,并且程序继续运行,就好像没有发生任何事情一样(参见 On error resume next type of error handling in PL/SQL oracle ).您需要在嵌套块中明确地包含潜在的失败语句.
2)你的程序是不重要的,忽略它抛出的所有异常不会影响你的主程序逻辑. (但是,这种情况很少,经常会导致长期的调试噩梦)
BEGIN
do_stuff();
EXCEPTION
WHEN OTHERS THEN
-- Ignore all exceptions and return control to calling block
NULL;
END;
http://stackoverflow.com/questions/27566867/pl-sql-exception-handling-do-nothing-ignore-exception
以上所述就是小编给大家介绍的《oracle – PL / SQL异常处理:do nothing(忽略异常)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
网站转换率优化之道
[美] Khalid Saleh、[美] Ayat Shukairy / 顾 毅 / 人民邮电出版社 / 2012-4 / 45.00元
内容简介: 怎样才能将访问者转化为顾客? 本书提供了一些切实可行的建议,比如如何说服访问者作出购买决定,如何避免用户因信息过量或导航繁琐而离开网站等。不论你是在设计或营销大型电子商务网站,还是在管理中小型在线业务,都可以从本书学会怎样使用市场营销原则、设计方法、可用性原则和分析数据来持续提升网站的转换率。 作者帮助过众多公司吸引在线顾客,有着丰富的实战经验,在书中细致讨论了从访问......一起来看看 《网站转换率优化之道》 这本书的介绍吧!