пятница, 8 июля 2011 г.

Использование операторов CONTINUE и CONTINUE-WHEN

Сегодня надо опубликовать статью в рубрику 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

Сегодня большая статья получилась (из за обилия примеров). Надо будет всегда побольше примеров вставлять (когда я их создаю, проверяю работоспособность – то и сам еще лучше понимаю эту тему). Следующую статью по теме PL/SQL я планирую опубликовать во вторник или среду следующей недели.

Комментариев нет:

Отправить комментарий