Oracle PL/SQL FOR LOOP с примером

⚡ Умное резюме

Oracle Цикл FOR в PL/SQL выполняет блок кода известное количество раз в диапазоне от нижнего до верхнего предела. Переменная цикла объявляется неявно и самоувеличивается, поэтому ручной счетчик не требуется, а ключевое слово REVERSE позволяет циклу вести обратный отсчет.

  • 🔢 лучших для: Цикл FOR подходит для заданного количества итераций, а не для неограниченного количества итераций.
  • 📏 Диапазон: Нижний и верхний пределы определяют, сколько раз будет выполняться цикл.
  • ⚙️ Неявный счетчик: Переменная цикла объявляется автоматически и увеличивается самостоятельно.
  • 🎯 Объем: Переменная цикла существует только внутри цикла.
  • 🔄 ОБЕСПЕЧИТЬ РЕГРЕСС: Добавление слова REVERSE перед нижним пределом приводит к обратному отсчету в цикле.
  • 🪜 Вложенные: Циклы могут быть вложенными, и внутренний цикл выполняется полностью для каждой внешней итерации.
  • 🚪 Автоматический выход: Цикл автоматически завершается, когда переменная выходит за пределы заданного диапазона.

Oracle Цикл For в PL/SQL

Что такое цикл 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.

Цикл FOR печатает числа от 1 до 5

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. Каждое число выводится столько раз, сколько ему присвоено значение.

Пример вложенного цикла FOR, часть 1

Пример вложенного цикла FOR, часть 2

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 нижний предел всё равно записывается перед верхним пределом; меняется только направление итерации. Для циклов, количество итераций в которых заранее неизвестно, базовый цикл это лучший выбор.

Часто задаваемые вопросы (FAQ)

Нет. Цикл FOR объявляет свою переменную неявно, и она существует только внутри цикла. Объявление переменной с тем же именем вне цикла не влияет на переменную, используемую циклом.

Функция REVERSE заставляет цикл итерироваться от верхнего предела к нижнему. Пределы по-прежнему записываются от нижнего к верхнему; меняется только порядок посещения значений.

Используйте цикл FOR, когда количество итераций известно заранее, например, в фиксированном диапазоне. Используйте цикл WHILE, когда цикл должен продолжаться до тех пор, пока выполняется условие и количество итераций не фиксировано.

Да, если базовый цикл просто считает значения между двумя фиксированными величинами. Искусственный интеллект может заменить ручной счетчик и оператор EXIT на цикл FOR, что сделает код короче. Убедитесь, что границы соответствуют исходным.

Нет. Переменная цикла доступна только для чтения внутри цикла, поэтому присваивание ей значения вызовет ошибку компиляции. Чтобы изменить ход выполнения, используйте отдельную переменную или выйдите из цикла с помощью команды EXIT.

Подведем итог этой публикации следующим образом: