Язык PL/SQL - страница 18
команда2_блока1;
команда3_блока1;
команда1_блока2;
команда2_блока2;
команда3_блока2;
команда4_блока1;
команда5_блока1;
команда1_блока1;
команда2_блока1;
команда3_блока1;
команда1_блока2;
команда2_блока2(error);
– в блоке 2
– ловится ZERO_DIVIDE:
команда1_zero_блока2;
команда2_zero_блока2;
–продолжение блока 1:
команда4_блока1;
команда5_блока1;
команда1_блока1;
команда2_блока1;
команда3_блока1;
команда1_блока2;
команда2_блока2(error);
–в блоке 2 ошибка
–преобразования
–не ловится, т.к.
–там только ZERO_DIVIDE
– в блоке 1
– ZERO_DIVIDE
– второй раз не ловит,
– а ловит OTHERS
– (он же все ловит):
команда1_others_блока1;
команда2_others_блока1;
Рассмотрим три случая в зависимости от значения, которое принимает переменная l_var ('1', или '0', или 'a').
Когда l_var=1 (первый столбец таблицы) исключения не инициируются выполняются все команды из разделов выполнения в той последовательности, как они записаны в коде.
В случае ошибки деления на ноль (второй столбец таблицы, l_var='0') в команде2_блока2 выполнение блока 2 прекращается, все остальные команды в блоке 2 после нее не выполняются, управление передается в раздел EXCEPTION блока 2, где пытаются поймать исключение деления на ноль (ZERO_DIVIDE). Подходящий обработчик в разделе обработки исключений блока 2 есть, поэтому исключение ловится в блоке 2, в котором успешно выполняются команды обработчика. После успешной обработки продолжается выполнение команд блока 1, родительского для блока 2, в котором произошла обработка исключения.
Конец ознакомительного фрагмента.
Если вам понравилась книга, поддержите автора, купив полную версию по ссылке ниже.
Продолжить чтение