Выполняются ли следующие операторы в любом случае, если первый вызовет исключение? - PullRequest
0 голосов
/ 19 ноября 2018

Когда исключение происходит в первом операторе выбора. Будет ли второй оператор выбора и функция затем выполняться в любом случае? Или все последующие утверждения будут пропущены?

BEGIN
   SELECT ...
   SELECT ...
   procedure_that_performs_select();
EXCEPTION
   WHEN NO_DATA_FOUND THEN  ...
END

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

Когда элемент управления переходит в блок исключений, он не возвращается в раздел начала или объявления блока pl / sql.После того же, если в вашем первом операторе select будет ошибка, будет выполнен блок исключения и будет использован соответствующий обработчик.В случае, если вы не упомянули ни соответствующий обработчик, ни КОГДА ДРУГИЕ, элемент управления перейдет в вызывающую среду (любую процедуру или интерфейс / IDE).

В случае, если вы все еще хотите выполнить второй выбороператор, вы можете написать другой блок pl / sql в обработчике исключений.

0 голосов
/ 19 ноября 2018

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

Вы можете увидеть это поведение в тестовом блоке.
Здесь мы будем печатать до и после исключения и можем наблюдать следующий оператор после того, как исключение не будет напечатано:

  BEGIN
    DBMS_OUTPUT.PUT_LINE('About to throw an exception');
    RAISE_APPLICATION_ERROR(-20001,'Exception');
    DBMS_OUTPUT.PUT_LINE('Done throwing exception');
  EXCEPTION WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE('Handling the exception');
END;
/

Результат:

About to throw an exception
Handling the exception

Примечание. В приведенном вами примере блок EXCEPTION обрабатывает только исключения NO DATA FOUND, поэтому другие типы исключений будут вызываться вместо выполнения через обработчик исключений.Но в любом случае обработка остановится в точке исключения.

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