Оператор цикла позволяет многократно выполнять одну последовательность операторов. Язык PL/SQL реализует три формы операторов цикла, которые могут иметь следующее формальное описание:
-- 1 форма - выход из цикла должен быть указан оператором выхода:
LOOP sequence_of_statements; END LOOP;
LOOP sequence_of_statements;
EXIT WHEN boolean_expression; -- Оператор выхода из цикла
END LOOP;
<<label_of_loop>> -- Метка цикла
LOOP sequence_of_statements;
END LOOP label_of_loop; -- Конец помеченного цикла
-- 2 форма - цикл выполняется, пока условие истинно:
WHILE condition LOOP sequence_of_statements;
END LOOP;
-- 3 форма - цикл выполняется заданное число раз:
FOR counter IN [REVERSE] lower_bound..higher_bound
LOOP sequence_of_statements;
END LOOP;
Для выхода из цикла используются операторы EXIT и EXIT-WHEN, а для выхода из блока PL/SQL - оператор RETURN.
Цикл FOR выполняется заданное число раз, пока значение счетчика цикла принадлежит указанному диапазону. Значение счетчика цикла FOR проверяется до выполнения цикла. Диапазон значений может быть указан через символ .. (две точки). Параметр REVERSE определяет обратный отсчет для переменной цикла. Диапазон значений может быть задан выражениями, но не должен изменяться внутри цикла.
Например:
-- 1. цикл LOOP:
| LOOP FETCH c1 INTO rec1; EXIT WHEN c1%NOTFOUND; END LOOP;
| -- Выход из цикла, если нет -- больше строк
|
-- 2. цикл WHILE:
WHILE c1 >= 50 LOOP
-- ...
c1:= c1 - 1;
END LOOP;