Установите деление на 0, чтобы вернуть 0 - PullRequest
2 голосов
/ 19 марта 2020

Мне пришло в голову, что PL / SQL может иметь более краткий способ сделать это:

У меня есть программа, где может произойти деление на ноль, но во всех случаях я хочу, чтобы это return 0. Мои текущие логи c выглядят так:

if bar <> 0 then
    foobar := foo/bar;
else
    foobar := 0;
end if;

Кто-нибудь знает более простой / дешевый способ сделать это? Я довольно новичок в PL / SQL и увидел, что могу использовать обработчик исключений, но это, похоже, пропускает операцию. Поэтому я думаю, что могу сделать исключение для zero_divide, а затем просто сделать:

foobar := 0;
foobar := foo/bar;

Я боюсь, что за этим не так легко следить. Спасибо за понимание!

Ответы [ 3 ]

5 голосов
/ 19 марта 2020

Попробуйте следующее:

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
3 голосов
/ 19 марта 2020

Использование CASE?

foobar = case when bar = 0 then 0
              else foo/bar
         end;
2 голосов
/ 19 марта 2020

Вы можете справиться и с exception.

BEGIN
   foobar := foo/bar;
EXCEPTION 
   WHEN ZERO_DIVIDE THEN
      foobar := 0;
END;
/

Приветствия !!

...