【发布时间】:2020-03-19 13:37:18
【问题描述】:
我突然想到 PL/SQL 可能有一种更简洁的方法:
我有一个程序可以发生被零除,但在所有情况下我都希望它返回 0。我当前的逻辑如下所示:
if bar <> 0 then
foobar := foo/bar;
else
foobar := 0;
end if;
有谁知道更简单/更便宜的方法吗?我对 PL/SQL 相当陌生,我看到我可以使用异常处理程序,但这似乎跳过了操作。所以我想我可以为zero_divide 做一个例外,然后就这样做:
foobar := 0;
foobar := foo/bar;
不过,我担心这并不容易理解。感谢您的任何见解!
【问题讨论】:
-
是的,我认为使用你的逻辑没有问题。
-
未定义除以 0,因此正确的解决方案是
foobar := foo/NULLIF(bar,0); -
@WernfriedDomscheit :这就是我问这个问题的原因;我特别希望它返回 0 而不是数学上正确的结果:P
-
好吧,你可以用
coalesce或nvl包裹表达式,例如nvl(foo/nullif(bar,0),0)- 但是,下面的case建议看起来更整洁。 -
哦,但这很聪明。老实说,我发现它更具可读性(我喜欢函数符号)。
标签: oracle plsql divide-by-zero