Опубликован: 11.12.2006 | Доступ: свободный | Студентов: 5361 / 282 | Оценка: 4.42 / 3.86 | Длительность: 57:15:00

Лекция 20: Расширенное описание T-SQL

WHILE

Конструкция WHILE используется для проверки условия, которое вызывает повторяющееся выполнение какого-либо оператора или блока операторов, пока значение это условия равно TRUE. Эту конструкцию обычно называют циклом WHILE, так как операторы внутри конструкции WHILE выполняются циклическим образом. Ниже приводится синтаксис:

WHILE Булево_выражение
Оператор_T-SQL | Блок_операторов
[BREAK] Оператор_T-SQL | Блок_операторов
[CONTINUE]

Как и в предложениях IF...ELSE, вы задаете в цикле WHILE блок операторов с помощью BEGIN и END. Ключевое слово BREAK используется для выхода из цикла WHILE, после чего выполнение продолжается с оператора, следующего после конца цикла WHILE. Если цикл WHILE встроен в другие циклы WHILE, то ключевое слово BREAK вызывает выход только из того цикла WHILE, в котором оно находится; любые операторы вне этого цикла, а также внешние циклы продолжают выполняться. Ключевое слово CONTINUE в цикле указывает, что следует повторить операторы между ключевыми словами BEGIN и END в данном цикле, игнорируя любые другие операторы после CONTINUE.

Рассмотрим пример, где простой цикл WHILE используется для выполнения одного оператора UPDATE. В этом цикле WHILE проверяется условие, что среднее значение по колонке royalty меньше 20. Если результатом проверки является значение TRUE, то колонка royalty модифицируется (увеличивается на 5 процентов). Затем условие цикла WHILE проверяется снова и модификация повторяется, пока среднее значение колонки royalty не станет равным или больше 20. Цикл имеет следующий вид:

WHILE (SELECT AVG(royalty) FROM roysched) < 20
UPDATE roysched SET royalty = royalty * 1.05
GO

Поскольку среднее значение колонки royalty (ставка арендной платы) сначала было равно 15, этот цикл WHILE выполнится 6 раз, прежде чем среднее значение не достигнет 20 ; затем выполнение цикла прекращается, поскольку результатом проверяемого условия становится значение FALSE.

Теперь рассмотрим пример, где в цикле WHILE используются BREAK, CONTINUE, BEGIN и END. Вы будет повторять в цикле оператор UPDATE, пока среднее значение royalty не превысит 25 процентов. Но если во время цикла максимальное значение royalty в таблице превысит 27 процентов, то мы прервем цикл независимо от среднего значения. Мы также добавим оператор SELECT после конца цикла WHILE. Ниже приводится соответствующая последовательность T-SQL:

WHILE (SELECT AVG(royalty) FROM roysched) < 25
BEGIN
UPDATE roysched SET royalty = royalty * 1.05
IF (SELECT MAX(royalty)FROM roysched) > 27 
BREAK
ELSE 
CONTINUE
END 
SELECT MAX(royalty) AS "MAX royalty" FROM roysched 
GO

Этот цикл будет выполнен только один раз, поскольку значение royalty больше 27 уже имеется в этой таблице. Оператор UPDATE все же выполняется один раз, так как среднее значение меньше 25 процентов. Затем проверяется условие оператора IF, и результатом является значение TRUE, поэтому выполняется оператор BREAK, вызывающий выход из цикла WHILE. Выполнение программы затем продолжается, начиная с оператора, следующего за ключевым словом END (последний оператор SELECT ).

Напомним, что вы можете также использовать вложенные циклы WHILE, но следует учитывать, что ключевое слово BREAK или CONTINUE применяется только к циклу, из которого оно было вызвано, но не к внешним циклам WHILE.

Константин Дементьев
Константин Дементьев
Россия, г. Мичуринск