Цикл WHILE

Цикл WHILE относится к числу условных. Его выполнение продолжается до тех пор, пока результатом проверки определенного в цикле условия является значе­ние TRUE. А поскольку возможность выполнения этого цикла зависит от условия и не ограничено определенным количеством повторений, он используется имен­но в тех случаях, когда количество повторений цикла заранее не известно. Приведем общий синтаксис цикла WHILE:
WHILE условие
испалнявные_операторы 
END LOOP;

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

Условие завершения цикла:

Если значением логического выражения цикла является FALSE или NULL

Когда проверяется условие завершения цикла:

Перед первым и каждым последующим выполнением тела цикла. Таким образом, не гарантируется даже однократное выполнение тела цикла WHILE

В каких случаях используется данный цикл:

Во-первых, если не известно, сколько раз будет выполняться тело цикла; во-вторых, когда необходимо, чтобы возможность выполнения цикла определялась условием; в-третьих, когда необязательно, чтобы тело цикла было выполнено хотя бы один раз

Условие WHILE проверяется в начале цикла и в начале каждой его итерации, пе­ред выполнением тела цикла Такого рода проверка позволяет сделать следую­щие выводы.

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

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

WHILE mask_index <= fmt_count AND NOT date_converted
     LOOP
     BEGIN

/* Попытка преобразовать строковое значение с использованием маски в строке таблицы */

        retval :=TO_DATE (value_in, fmts (mask_index));
      date_converted := TRUE;
     EXCEPTION
          WHEN OTHERS
         THEN
         retval := NULL;
        mask_index := mask_index + 1;
   END;
END LOOP: