ITERATE
ITERATE label
На відміну від оператора LEAVE, оператор ITERATE не припиняє виконання циклу, він лише виконує дострокове припинення поточної ітерації.
Зауваження:
- Оператор iterate еквівалентний оператору continue в С-подібних мовах програмування.
Розглянемо програму, яка в циклі формує бінарну послідовність, додаючи до рядка дві одиниці на парних ітераціях та дві одиниці і два нулі на непарних (приклад).
Приклад:
CREATE PROCEDURE binstring (IN num INT)
LANGUAGE SQL
BEGIN
DECLARE i INT DEFAULT 0;
DECLARE bin TINYTEXT DEFAULT ’’;
IF (num > 0) THEN
wet : WHILE 1 < num DO
SET i = i + 1;
SET bin = CONCAT(bin, 'll');
IF !(i/2 - CEILING(i/2)) THEN ITERATE wet;
END IF;
SET bin = CONCAT(bin, '00');
END WHILE wet;
SELECT bin;
ELSE
SELECT 'Хибне значення параметру';
END IF;
END //
CALL binstring(10)//
bin
110011110011110011110011110011 1
Бінарна послідовність зберігається в тимчасовому рядку bin, який обов'язково має бути ініційований порожній рядком:
DECLARE bin TINYTEXT DEFAULT'';
Якщо ініціалізація не проведена, змінна отримає значення NULL, і всі операції з цією змінною також повертатимуть null. На кожній ітерації змінної bin за допомогою функції CONCAT () додається послідовність '11 '. Якщо індекс i є непарним (1,3,5,7,9), поточний цикл припиняється за допомогою ключового слова iterate, якщо індекс є парним (0,2, 4,6, 8), то ітерація виконується до кінця, т. е. до тимчасового рядку bin додається ще й послідовність '00 '. На парність індекс i перевіряється за допомогою рядка
i / 2 - CEILING (i / 2)
Якщо індекс i ділиться на 2 без залишку, цей вираз поверне 0 (брехня), якщо число є непарним, то вираз поверне 0.5 (істина).
Зауваження:
- Необхідно стежити, щоб оператор SET, що збільшує значення лічильника i на одиницю, на кожній ітерації був розташований до оператора ITERATE, інакше це призведе до створення нескінченного циклу - значення лічильника буде залишатися не парним і збільшуватися не буде, тому що оператор ITERATE припинятиме виконання ітерації циклу достроково.