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 припинятиме виконання ітерації циклу достроково.