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