Сегодня надо опубликовать статью в рубрику PL/SQL (все-таки план надо соблюдать). Потихоньку увеличиваю свои знания данного языка (правда не уверен в том, что мне они через пять-десять лет понадобятся). Ничего – такие сведения точно даром не пропадут, если что – можно будет где-нибудь их использовать.
Например – я кое-что узнавал про монеты (наши, российские, можно сказать – коллекционирую). Так что знаю стоимость монет (10 копеек 2001 года стоимость очень даже хорошая, на сайте стоимость различных монет представлена). Такие сведения всегда будут полезными, что и к PL/SQL относится.
Ладно, монеты – монетами (они ждут своего часа), а нам надо приступать к следующей теме по PL/SQL – к изучению операторов CONTINUE и CONTINUE-WHEN:
Оператор CONTINUE:
Если в коде программы встречается оператор CONTINUE, выполняющееся повторение цикла сразу же прекращается и управление передается новой итерации. Пожалуй, чтобы нормально понять этот оператор – надо пример рассмотреть:
DECLARE
x NUMBER;
BEGIN
x := 0;
LOOP
x := x + 1;
dbms_output.put_line('x = '|| to_char(x));
IF x = 3 THEN
dbms_output.put_line('x в CONTINUE = ' || to_char(x));
CONTINUE;
END IF;
x := x + 1;
EXIT WHEN x = 5;
END LOOP;
END;
Здесь в цикле увеличивается переменная X на единицу. После того, как она станет равна трем – выполнится блок IF-THEN, в результате которого управление опять перейдет на начало цикла – и последний оператор увеличения переменой X не сработает (в той итерации). В окне вывода мы получим следующую информацию:
x = 1
x = 3
x в CONTINUE = 3
x = 4
Что вполне логично. Сначала дважды срабатывает увеличение на единицу (так что X стал равен 2), потом он увеличился еще раз (в цикле) и стал равен трем – соответственно сработал оператор IF-THEN с внутренним CONTINUE. После этого X в новой итерации дважды увеличилась (стала равна 5) – и произошел выход из цикла.
Оператор CONTINUE-WHEN:
Если встречается оператор CONTINUE-WHEN, проверяется условие в предложении WHEN и, если оно инстинно – то нынешная итерация цикла завершается и запускается новое повторение цикла. Если условие WHEN ложно – то оператор CONTINUE-WHEN работает как оператор NULL, то есть – ничего не выполняется (прекращения итерации цикла не будет).
Оператор CONTINUE-WHEN создан чтобы заменить многословные конструкцию типа IF .. THEN .. CONTINUE.
DECLARE
x NUMBER := 0;
BEGIN
LOOP
dbms_output.put_line('x = '|| to_char(x));
x := x + 1;
CONTINUE WHEN x < 3;
dbms_output.put_line('x в CONTINUE = ' || to_char(x));
EXIT WHEN x > 5;
END LOOP;
END;
Решил использовать пример, который у меня был. Здесь проверяем условие X < 3. Пока оно истинно – CONTINUE срабатывает. Когда условие ложно – то итерация цикла выполняется полностью. В окне вывода будет следующая информация:
x = 0
x = 1
x = 2
x в CONTINUE = 3
x = 3
x в CONTINUE = 4
x = 4
x в CONTINUE = 5
x = 5
x в CONTINUE = 6
Комментариев нет:
Отправить комментарий