将除以 0 设置为 return 0
Set division by 0 to return 0
我想到 PL/SQL 可能有更简洁的方法:
我有一个可以被零除的程序,但在所有情况下我都希望它为 return 0。我当前的逻辑如下:
if bar <> 0 then
foobar := foo/bar;
else
foobar := 0;
end if;
有谁知道 easier/cheaper 的方法吗?我是 PL/SQL 的新手,我看到我可以使用异常处理程序,但这似乎跳过了操作。所以我想我可以为 zero_divide
做一个例外,然后就这样做:
foobar := 0;
foobar := foo/bar;
不过我担心这不太容易理解。感谢您的任何见解!
使用CASE
?
foobar = case when bar = 0 then 0
else foo/bar
end;
尝试以下操作:
declare
foo integer := 1;
bar integer := 0;
foobar integer;
begin
foobar := case bar when 0 then 0 else foo/bar end;
dbms_output.put_line(foobar);
end;
输出:
0
你也可以用exception
处理它。
BEGIN
foobar := foo/bar;
EXCEPTION
WHEN ZERO_DIVIDE THEN
foobar := 0;
END;
/
我想到 PL/SQL 可能有更简洁的方法:
我有一个可以被零除的程序,但在所有情况下我都希望它为 return 0。我当前的逻辑如下:
if bar <> 0 then
foobar := foo/bar;
else
foobar := 0;
end if;
有谁知道 easier/cheaper 的方法吗?我是 PL/SQL 的新手,我看到我可以使用异常处理程序,但这似乎跳过了操作。所以我想我可以为 zero_divide
做一个例外,然后就这样做:
foobar := 0;
foobar := foo/bar;
不过我担心这不太容易理解。感谢您的任何见解!
使用CASE
?
foobar = case when bar = 0 then 0
else foo/bar
end;
尝试以下操作:
declare
foo integer := 1;
bar integer := 0;
foobar integer;
begin
foobar := case bar when 0 then 0 else foo/bar end;
dbms_output.put_line(foobar);
end;
输出:
0
你也可以用exception
处理它。
BEGIN
foobar := foo/bar;
EXCEPTION
WHEN ZERO_DIVIDE THEN
foobar := 0;
END;
/