Что плохого в «Когда другие, то ноль» в PL / SQL? - PullRequest
5 голосов
/ 17 сентября 2009

Я только что прочитал этот вопрос , и решение гласит:

Тот факт, что вы не знаете, вы получили исключение NO_DATA_FOUND предполагает что вы сделали одним из самых больших ошибки, которые когда-либо делали разработчики PL / SQL:

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

Не могли бы вы объяснить, в чем заключается ошибка в этом утверждении и что бы вы сделали, чтобы избежать этого ...

Ответы [ 3 ]

14 голосов
/ 17 сентября 2009

Проблема в том, что вы перехватываете все исключения, а затем игнорируете их. Вы никогда не узнаете, когда что-то пошло не так.

1 голос
/ 17 августа 2014

В этом фрагменте кода нет ничего плохого, если вы не хотите, чтобы, например, исключение блока pl / sql распространялось дальше. Если вы делаете это нарочно, это не плохой код или ошибка. Это подвох в пл / 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;
0 голосов
/ 15 мая 2017

Это ВСЕГДА плохое кодирование. И вы можете сказать, что это плохое кодирование, если вы делаете это нарочно. На самом деле, это ужасный код, если вы делаете это нарочно, потому что он демонстрирует, насколько мало вы понимаете всех ошибок, которые вы полностью игнорируете.

http://stevenfeuersteinonplsql.blogspot.com/2017/02/now-not-to-handle-exceptions.html

https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1155066278457

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...