PL / SQL中“当其他人为空”时有什么不好?

时间:2009-09-17 12:00:42

标签: plsql

我刚读过this question,解决方案声明:

  

你不知道自己得到了这个事实   NO_DATA_FOUND异常表明   你做了最大的一个   PL / SQL开发人员犯的错误:

EXCEPTION
    -- Never do this in real code!!!
   WHEN OTHERS THEN NULL;
END;

你能解释一下这句话中的错误是什么,你会怎么做才能避免这样做......

3 个答案:

答案 0 :(得分:14)

问题是,您正在捕获所有异常,然后忽略它们。你什么时候出错都不会知道。

答案 1 :(得分:1)

如果您不希望pl / sql块的异常传播任何进一步的代码,那么这段代码没有任何问题。如果你故意这样做,那不是错误的代码或错误。这是pl / sql中的所有问题。并且在代码中可能存在嵌套BEGIN / EXCEPTION / END块的情况,并且如果特定的代码交叉部分失败,则可能不希望事务失败。如果你出于任何原因/要求故意这样做,你就不能说它是错误的编码。

BEGIN

  --something important here

  --something even more important here

  BEGIN
    --something secondary goes here but not important enough to stop the process or
    --log a message about it either
    --maybe send an informative email to the support group or 
    --insert a log message when debugging the process or
    --the list could go on and on here
  EXCEPTION
    --I don't care if this block fails, absorbing all errors regardless of type
    WHEN OTHERS THEN NULL;
  END;

  -- something super important here, must happen

EXCEPTION
  WHEN NO_DATA_FOUND THEN 
    -- do something useful for this exception
  WHEN OTHERS THEN
    -- do something by default if we don't expect this error
END;

答案 2 :(得分:-2)

总是编码不好。如果你故意这样做,你可以说这是糟糕的编码。事实上,如果你故意这样做,那就是可怕的代码,因为它证明了你对你完全忽略的所有错误的理解程度很低。

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

https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1155066278457