Oracle PL/SQL FOR LOOP с примером
⚡ Умное резюме
Oracle Цикл FOR в PL/SQL выполняет блок кода известное количество раз в диапазоне от нижнего до верхнего предела. Переменная цикла объявляется неявно и самоувеличивается, поэтому ручной счетчик не требуется, а ключевое слово REVERSE позволяет циклу вести обратный отсчет.
Что такое цикл FOR?
Оператор «ЦИКЛ FOR» лучше всего подходит, когда вам нужно выполнить код известное количество раз, а не на основе какого-либо другого условия.
В этом цикле заданы нижний и верхний пределы, и пока значение переменной цикла находится в этом диапазоне, цикл выполняется.
Переменная цикла является самоинкрементной, поэтому явная операция инкремента не требуется. Переменную цикла не нужно объявлять, поскольку она объявляется неявно.
FOR <loop_variable> in <lower_limit> .. <higher_limit> LOOP <execution block starts> . . . <execution_block_ends> END LOOP;
Объяснение синтаксиса:
- Ключевое слово 'FOR' обозначает начало цикла, а 'END LOOP' — его конец.
- Переменная цикла проверяется каждый раз перед выполнением соответствующей части кода.
- Блок выполнения содержит весь код, который необходимо выполнить, и может содержать любое исполняемое сообщение.
- Переменная loop_variable объявляется неявно во время выполнения цикла, и её область видимости ограничена только пределами цикла.
- Когда переменная цикла выходит за пределы допустимого диапазона, управление завершается.
- Цикл можно настроить на работу в обратном порядке, добавив ключевое слово 'REVERSE' перед параметром lower_limit.
Пример 1: В этом примере мы выводим числа от 1 до 5, используя оператор цикла FOR.
BEGIN dbms_output.put_line('Program started.'); FOR a IN 1 .. 5 LOOP dbms_output.put_line(a); END LOOP; dbms_output.put_line('Program completed.'); END; /
Code Объяснение:
- Code строка 2: Выводится сообщение «Программа запущена».
- Code строка 3: Ключевое слово 'FOR' обозначает начало цикла, и объявляется переменная цикла 'a'. Теперь она принимает значения от 1 до 5.
- Code строка 5: Печатает значение «а».
- Code строка 6: Ключевое слово 'END LOOP' обозначает конец блока выполнения.
- Выполнение строки 5 продолжается до тех пор, пока значение переменной 'a' не достигнет 6, после чего условие нарушается, и управление выходит из цикла.
- Code строка 7: Выводится сообщение «Программа завершена».
Вложенные циклы
Циклы также могут быть вложенными. Внешний и внутренний циклы могут быть разных типов. Во вложенном цикле для каждой итерации внешнего цикла полностью выполняется внутренний цикл.
LOOP --outer <execution block starts> LOOP --inner <execution_part> END LOOP; <execution_block_ends> END LOOP;
Объяснение синтаксиса:
- Внешняя петля содержит внутри себя еще одну петлю.
- Циклы могут быть любого типа, и функциональность выполнения при этом одинакова.
Пример 1: В этом примере мы выводим числа от 1 до 3, используя оператор цикла FOR. Каждое число выводится столько раз, сколько ему присвоено значение.
DECLARE b NUMBER; BEGIN dbms_output.put_line('Program started'); FOR a IN 1..3 LOOP b:= 1; WHILE (a>=b) LOOP dbms_output.put_line(a); b:= b+1; END LOOP; END LOOP; dbms_output.put_line('Program completed'); END; /
Code Объяснение:
- Code строка 2: Объявление переменной 'b' как объекта типа 'NUMBER'.
- Code строка 4: Выводится сообщение «Программа запущена».
- Code строка 5: Ключевое слово 'FOR' обозначает начало цикла, и объявляется переменная цикла 'a'. Теперь она принимает значения от 1 до 3.
- Code строка 7: Сброс значения «b» на «1» каждый раз.
- Code строка 8: Внутренний в то время как цикл проверяет условие a>=b.
- Code строка 10: Печатает значение «a», если вышеуказанное условие выполняется.
- Code строка 14: Выводится сообщение «Программа завершена».
Цикл FOR и обратный цикл FOR
По умолчанию цикл FOR считает вверх от нижнего предела к верхнему. Добавление ключевого слова REVERSE заставляет его считать вниз, в то время как цикл продолжает отсчитывать.ping Пределы указаны в том же порядке. Обе формы показаны вместе ниже, чтобы разница была очевидна.
| форма для заполнения | заголовок | Порядок значений |
|---|---|---|
| Восходящий | ДЛЯ В 1 .. 5 | 1, 2, 3, 4, 5 |
| нисходящий | ДЛЯ В ОБРАТНОМ ПОЛОЖЕНИИ 1 .. 5 | 5, 4, 3, 2, 1 |
Обратите внимание, что даже при использовании оператора REVERSE нижний предел всё равно записывается перед верхним пределом; меняется только направление итерации. Для циклов, количество итераций в которых заранее неизвестно, базовый цикл это лучший выбор.





