›  ›  ›  › Цикл WHILE в PL/SQL Oracle

Цикл WHILE в PL/SQL Oracle

Условный цикл WHILE выполняется до тех пор, пока определенное в цикле условие остается равным TRUE. А поскольку возможность выполнения цикла зависит от условия и не ограничивается фиксированным количеством повторений, он используется именно в тех случаях, когда количество повторений цикла заранее не известно.

Синтаксис цикла WHILE

WHILE условие
LOOP
   исполняемые_команды
END LOOP;

Здесь условие — логическая переменная или выражение, результатом проверки которого является логическое значение TRUE, FALSE или NULL. Условие проверяется при каждой итерации цикла. Если результат оказывается равным TRUE, тело цикла выполняется. Если же результат равен FALSE или NULL, то цикл завершается, а управление передается исполняемой команде, следующей за командой END LOOP.

Свойства цикла WHILE

Свойство Описание
Условие завершения цикла Если значением логического выражения цикла является FALSE или NULL
Когда проверяется условие завершения цикла Перед первым и каждым последующим выполнением тела цикла. Таким образом, не гарантируется даже однократное выполнение тела цикла WHILE
В каких случаях используется данный цикл (1) Если не известно, сколько раз будет выполняться тело цикла; (2) возможность выполнения цикла должна определяться условием; (3) тело цикла может не выполняться ни одного раза

Условие WHILE проверяется в начале цикла и в начале каждой его итерации, перед выполнением тела цикла. Такого рода проверка имеет два важных последствия:

  • Вся информация, необходимая для вычисления условия, должна задаваться перед первым выполнением цикла.
  • Может оказаться, что цикл WHILE не будет выполнен ни одного раза.

В следующем примере цикла WHILE используется условие, представленное сложным логическим выражением. Прерывание цикла WHILE вызвано одной из двух причин: либо завершением списка масок даты, которые применяются для выполнения преобразования, либо успешным завершением преобразования (и теперь переменная date_converted содержит значение TRUE):

WHILE mask_index <= mask_count AND NOT date_converted
LOOP
   BEGIN
      /* Попытка преобразования строки по маске в записи таблицы */
      retval := TO_DATE (value_in, fmts (mask_index));
      date_converted := TRUE;
   EXCEPTION
      WHEN OTHERS
      THEN
         mask_index:= mask_index+ 1;
   END;
END LOOP;

Метки: , , .

Записи по теме

Добавить комментарий

Ваш адрес email не будет опубликован.