Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Plsql “什么是坏的?”;当其他人则为空时“;在PL/SQL中?_Plsql - Fatal编程技术网

Plsql “什么是坏的?”;当其他人则为空时“;在PL/SQL中?

Plsql “什么是坏的?”;当其他人则为空时“;在PL/SQL中?,plsql,Plsql,我刚读到,一个解决方案指出: 事实上你不知道你有 “未找到数据”异常表明 你做了一个最大的 PL/SQL开发人员曾经犯过的错误: EXCEPTION -- Never do this in real code!!! WHEN OTHERS THEN NULL; END; 您能解释一下这条语句中的错误是什么,以及您会如何避免这样做……问题是,您正在捕获所有异常,然后忽略它们。你永远不会知道什么时候出了问题。如果你不想让pl/sql块的异常进一步传播,那么这段代码就没有问题。如果你是

我刚读到,一个解决方案指出:

事实上你不知道你有 “未找到数据”异常表明 你做了一个最大的 PL/SQL开发人员曾经犯过的错误:

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

您能解释一下这条语句中的错误是什么,以及您会如何避免这样做……

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

如果你不想让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;

它总是很糟糕的编码。如果你故意这么做的话,你可以说这是糟糕的编码。事实上,如果你故意这么做的话,这是一段可怕的代码,因为它表明你对所有你完全忽略的错误了解得太少了


您的意思是,这里的错误做法不是使用“When Others Then Null”,而是仅使用它,即之前不捕获任何其他异常?不,使用它是不好的。至少,when others子句应该将异常记录在某个地方。但最有可能的情况是,您应该记录并提高exception@Matthew:我不同意。有许多非常有效的场景,您希望捕获所有异常并忽略它们。是否记录这些日志取决于您。我同意十有八九的情况下你会想做一些日志记录,但如果我在一个常用的低级API中做一些尽力而为的代码,那么我可能会跳过日志记录的开销。@darreljnz:然后有一天你会对某些失败的原因感到困惑,不得不添加调试代码,或者运行调试器以查找其失败的位置。可能会有非常有限的情况,我怀疑它更像999/1000,而不是9/10。底线:如果你不关心进程是否失败,那么你就不关心进程是否成功——那么为什么要浪费资源首先这么做呢?完全删除代码。实际上,很少不关心任何可能的异常。99.9%的
当其他人为空时
代码是当有人想忽略某个特定错误,但太懒而无法正确捕获它时。