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

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

Циклы в PL/SQL выполняют фрагмент кода многократно заданное количество раз. PL/SQL предлагает базовые циклы, циклы FOR и WHILE, управляемые операторами CONTINUE, EXIT, EXIT WHEN и GOTO, а циклы могут быть помечены для удобного управления вложенными структурами.

  • 🔁 Цель: Цикл многократно выполняет блок кода, уменьшая его размер и сложность.
  • 🧭 Счетчик циклов: Счетчик определяет условие цикла и должен изменяться, чтобы цикл мог завершиться.
  • ⏭️ ПРОДОЛЖАТЬ: Пропускает оставшуюся часть текущей итерации и начинает следующую.
  • 🚪 ВЫХОД / ВЫХОД В КОГДА: Цикл завершается немедленно, при необходимости — при истинном логическом условии.
  • 🏷️ Ярлыки: Метка петли, заключенная в двойные угловые скобки, позволяет команде EXIT выбрать внешнюю петлю.
  • ♾️ Базовый цикл: Программа работает до тех пор, пока не будет достигнута явная точка выхода; без неё она зацикливается навсегда.
  • 🧩 Три типа: Базовый цикл, цикл FOR и цикл WHILE охватывают распространенные шаблоны.

Oracle Цикл PL/SQL

Что такое петли?

Циклы позволяют выполнять определённую часть кода в программе желаемое количество раз. В этом уроке мы рассмотрим концепцию циклов в PL/SQL и управление потоком выполнения в циклах.

Введение в концепцию петель

Использование циклов в программировании предоставляет следующие преимущества:

  • Повторное использование кода.
  • Уменьшен размер кода.
  • Простой и понятный интерфейс управления.
  • Пониженная сложность.

На схеме ниже показан туалет.ping концепция.

Туалетping Схема потока событий в PL/SQL

На приведенной выше схеме проверяется условие цикла, и пока оно выполняется, блок выполнения продолжается.

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

Заявления контроля цикла

Прежде чем изучать концепцию циклов, важно изучить операторы управления циклом. Эти операторы управляют потоком выполнения внутри цикла.

ПРОДОЛЖИТЬ

Это ключевое слово указывает механизму PL/SQL, что при обнаружении CONTINUE внутри цикла он пропускает оставшийся код в блоке выполнения и немедленно начинает следующую итерацию. В основном это используется, когда код внутри цикла должен быть пропущен для определенных значений итерации.

ВЫХОД / ВЫХОД КОГДА

Это ключевое слово указывает механизму PL/SQL немедленно выйти из текущего цикла. Вложенный цикл, вызов EXIT во внутреннем цикле приводит к выходу только из внутреннего цикла, а не из внешнего. За вызовом 'EXIT WHEN' следует выражение, дающее логический результат; если результат равен TRUE, управление переходит к следующему циклу.

GOTO

Этот оператор передает управление помеченному оператору («GOTO ;»). Он имеет следующие ограничения:

  • Передача управления может осуществляться только внутри подпрограмм.
  • Передача управления от части, обрабатывающей исключения, к части, выполняющей операцию, невозможна.

Использование этого оператора не рекомендуется, если нет альтернативы, поскольку это связано с контролем кода. tracУправляемость значительно затрудняется, когда контроль передается от одной части к другой.

Типы циклов в PL/SQL

PL/SQL Предоставляет следующие три типа циклов:

В таблице ниже приведено сравнение трех вариантов, после чего подробно рассматривается базовый цикл.

Loop Критерии выхода Лучше всего использовать, когда
Базовый цикл Явный выход из блока. Выход не зависит от фиксированного количества или условия.
Цикл FOR Счетчик достигает конца своего диапазона Количество итераций известно заранее.
Цикл WHILE Условие становится ложным Цикл должен выполняться до тех пор, пока выполняется определенное условие.

Базовый оператор цикла

Это простейшая структура цикла в PL/SQL. Блок выполнения начинается с ключевого слова 'LOOP' и заканчивается словом 'END LOOP'. Условие выхода должно быть указано внутри блока выполнения, чтобы управление вышло из цикла, при этом ключевое слово EXIT должно быть указано явно.

Базовая структура цикла в PL/SQL

LOOP
<execution block starts>
<EXIT condition based on developer criteria>
<execution_block_ends>
END LOOP;

Объяснение синтаксиса:

  • Ключевое слово 'LOOP' обозначает начало цикла, а 'END LOOP' — его конец.
  • Блок выполнения содержит весь код, который необходимо выполнить, включая условие выхода.
  • Часть, отвечающая за выполнение, может содержать любой исполняемый оператор.

Примечание: Простой цикл без ключевого слова EXIT — это бесконечный цикл, который никогда не останавливается.

Пример 1: В этом примере мы выводим числа от 1 до 5, используя простой цикл.

Основные номера печати петель от 1 до 5

DECLARE
a NUMBER:= 1;
BEGIN
dbms_output.put_line('Program started.');
LOOP
dbms_output.put_line(a);
a:= a+1;
EXIT WHEN a>5;
END LOOP;
dbms_output.put_line('Program completed');
END;
/

Code Объяснение:

  • Code строка 2: Объявляем переменную 'a' как 'NUMBER' и инициализируем её значением '1'.
  • Code строка 4: Выводится сообщение «Программа запущена».
  • Code строка 5: Ключевое слово 'LOOP' обозначает начало цикла.
  • Code строка 6: Печатает значение «а».
  • Code строка 7: Увеличивает значение 'a' на 1.
  • Code строка 8: Проверяет, превышает ли значение «a» 5.
  • Code строка 9: Ключевое слово 'END LOOP' обозначает конец блока выполнения.
  • Строки с 6 по 8 продолжают выполняться до тех пор, пока значение 'a' не достигнет 6, после чего условие возвращается к TRUE, и управление выходит из цикла.
  • Code строка 10: Выводится сообщение «Программа завершена».

Маркировка циклов

В PL/SQL циклы можно помечать метками. Метка должна быть заключена между символами «<<» и «>>». Пометка циклов, особенно вложенных, повышает читаемость. Метку можно указать в команде EXIT для выхода из конкретного цикла, так что управление может выйти из внешнего цикла вложенной структуры напрямую, указав команду EXIT, за которой следует метка внешнего цикла.

Помеченная вложенная петлевая структура

<<OUTER_LOOP>>
LOOP
<execution_block_starts>
.
<<INNER_LOOP>>
LOOP --inner
<execution_part>
END LOOP;
.
<execution_block_ends>
END LOOP;

Объяснение синтаксиса:

  • Внешняя петля содержит внутри себя еще одну петлю.
  • '< >' и '< «>» — это метки этих циклов.

Пример 1: В этом примере мы выводим числа, начиная с 1, используя простой цикл. Каждое число выводится столько раз, сколько ему присвоено значение. Верхний предел последовательности задается в части объявления цикла. Для этого мы используем концепцию меток.

Пример цикла с обозначениями, часть 1Пример цикла с обозначениями, часть 2

DECLARE
a NUMBER:= 0;
b NUMBER;
upper_limit NUMBER := 4;
BEGIN
dbms_output.put_line('Program started.');
<<outer_loop>>
LOOP
a:= a+1;
b:= 1;
<<inner_loop>>
LOOP
EXIT outer_loop WHEN a > upper_limit;
dbms_output.put_line(a);
b:= b+1;
EXIT inner_loop WHEN b>a;
END LOOP;
END LOOP;
dbms_output.put_line('Program completed.');
END;
/

Code Объяснение:

  • Code строки 2-3: Объявление переменных 'a' и 'b' как переменных типа 'NUMBER'.
  • Code строка 4: Объявление переменной 'upper_limit' как 'NUMBER' со значением '4'.
  • Code строка 6: Выводится сообщение «Программа запущена».
  • Code строка 7: Внешний цикл обозначен как «outer_loop».
  • Code строка 9: Значение «a» увеличивается на 1.
  • Code строка 11: Внутренний цикл обозначен как «inner_loop».
  • Code строка 13: Условие EXIT проверяет, превышает ли значение 'a' значение 'upper_limit'. Если нет, цикл продолжается; в противном случае происходит прямой выход из внешнего цикла.
  • Code строка 14: Печать значения «b».
  • Code строка 15: Увеличивает значение параметра 'b' на 1.
  • Code строка 16: Условие выхода, проверяющее, больше ли значение 'b', чем 'a'. Если да, то происходит выход из внутреннего цикла.
  • Code строка 19: Выводится сообщение «Программа завершена».

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

Оператор EXIT завершает цикл безусловно. Оператор EXIT WHEN завершает цикл только тогда, когда выполняется следующее логическое выражение, что устраняет необходимость в отдельном операторе IF вокруг обычного оператора EXIT.

Метка позволяет оператору EXIT во внутреннем цикле покинуть именованный внешний цикл за один шаг. Это также значительно упрощает чтение вложенного кода. tracоператоры END LOOP.

Если в блоке нет условия выхода (EXIT), или счетчик никогда не достигает условия выхода, цикл никогда не останавливается. Всегда следите за тем, чтобы счетчик изменялся в сторону условия выхода (EXIT WHEN).

Часто — да. Искусственный интеллект может. tracВы можете определить, приближается ли счетчик к условию EXIT, и выдать предупреждение, если цикл не имеет достижимого выхода, хотя для подтверждения выхода, зависящего от данных, все равно потребуется тестовый запуск.

Функция CONTINUE пропускает оставшуюся часть текущей итерации и переходит к следующей. Она полезна, когда определенные значения следует игнорировать, не выходя из цикла полностью.

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