Циклы в MySQL

MySQL предоставляет три цикла: while, repeat и loop. Их можно использовать в теле хранимой процедуры или функции, т.е., между ключевыми словами BEGIN и END.

Цикл WHILE

DO - начало тела цикла
END WHILE - завершение цикла
Все команды, которые располагаются между этими ключевыми словами, выполняются на каждой итерации цикла.

Количество повторов не обязательно задавать внутри хранимой процедуры. Можно задать его в качестве входящего параметра.

Локальная переменная i пробегает значение от 0 до заданного в параметре num. Как только оно достигает заданного пользователем значения, условие становится ложным и цикл прекращает работу.

Для досрочного выхода из цикла предназначен оператор LEAVE.

Не зависимо от переменной num, максимальное количество итераций будет не больше 3.

Циклы можно вкладывать друг в друга, поэтому, чтобы команда LEAVE понимала, какой из циклов следует останавливать, ей всегда передается метка цикла, в данном случае cycle. Эту метку мы должны поместить перед ключевым словом WHILE и после ключевого слова END WHILE.

От оператора LEAVE, ITERATE отличается тем, что не прекращает выполнение цикла, а лишь досрочно прекращает текущую итерацию.

Счетчик i проходит по значениям от 1 до 10, на каждой итерации значение счетчика добавляется к строке var. Если if-условие ложное, то значение добавляется два раза, если истинное, срабатывает оператор ITERATE и текущая итерация завершается досрочно. Поэтому в результатах происходит удвоенные цифры до 5, а после 5 - одиночные.

Цикл REPEAT

В отличии от цикла WHILE, в REPEAT условие для выхода из цикла располагается не в начале тела цикла, а в конце после ключевого слова UNTIL.
Если условие TRUE - происходит еще одна итерация, если FALSE - работа цикла прекращается.

Цикл LOOP

LOOP, в отличие от WHILE и REPEAT не имеет условий выхода из цикла. Выход из цикла осуществляется с помощью оперетора LEAVE, который досрочно прекращает текущую итерацию.


Теги: