Oracle PL/SQL LOOP с примером
⚡ Умное резюме
Циклы в PL/SQL выполняют фрагмент кода многократно заданное количество раз. PL/SQL предлагает базовые циклы, циклы FOR и WHILE, управляемые операторами CONTINUE, EXIT, EXIT WHEN и GOTO, а циклы могут быть помечены для удобного управления вложенными структурами.
Что такое петли?
Циклы позволяют выполнять определённую часть кода в программе желаемое количество раз. В этом уроке мы рассмотрим концепцию циклов в PL/SQL и управление потоком выполнения в циклах.
Введение в концепцию петель
Использование циклов в программировании предоставляет следующие преимущества:
- Повторное использование кода.
- Уменьшен размер кода.
- Простой и понятный интерфейс управления.
- Пониженная сложность.
На схеме ниже показан туалет.ping концепция.
На приведенной выше схеме проверяется условие цикла, и пока оно выполняется, блок выполнения продолжается.
На каждой итерации переменная счетчика цикла, определяющая условие цикла, должна изменяться, чтобы обеспечить выход из цикла. В некоторых случаях этот счетчик увеличивается или уменьшается на заданное значение, а в других — это условие поиска, которое продолжает выполнение блока до тех пор, пока оно не будет выполнено.
Заявления контроля цикла
Прежде чем изучать концепцию циклов, важно изучить операторы управления циклом. Эти операторы управляют потоком выполнения внутри цикла.
ПРОДОЛЖИТЬ
Это ключевое слово указывает механизму PL/SQL, что при обнаружении CONTINUE внутри цикла он пропускает оставшийся код в блоке выполнения и немедленно начинает следующую итерацию. В основном это используется, когда код внутри цикла должен быть пропущен для определенных значений итерации.
ВЫХОД / ВЫХОД КОГДА
Это ключевое слово указывает механизму PL/SQL немедленно выйти из текущего цикла. Вложенный цикл, вызов EXIT во внутреннем цикле приводит к выходу только из внутреннего цикла, а не из внешнего. За вызовом 'EXIT WHEN' следует выражение, дающее логический результат; если результат равен TRUE, управление переходит к следующему циклу.
GOTO
Этот оператор передает управление помеченному оператору («GOTO ;»). Он имеет следующие ограничения:
- Передача управления может осуществляться только внутри подпрограмм.
- Передача управления от части, обрабатывающей исключения, к части, выполняющей операцию, невозможна.
Использование этого оператора не рекомендуется, если нет альтернативы, поскольку это связано с контролем кода. tracУправляемость значительно затрудняется, когда контроль передается от одной части к другой.
Типы циклов в PL/SQL
PL/SQL Предоставляет следующие три типа циклов:
- Базовый оператор цикла
- Для оператора цикла
- Оператор цикла while
В таблице ниже приведено сравнение трех вариантов, после чего подробно рассматривается базовый цикл.
| Loop | Критерии выхода | Лучше всего использовать, когда |
|---|---|---|
| Базовый цикл | Явный выход из блока. | Выход не зависит от фиксированного количества или условия. |
| Цикл FOR | Счетчик достигает конца своего диапазона | Количество итераций известно заранее. |
| Цикл WHILE | Условие становится ложным | Цикл должен выполняться до тех пор, пока выполняется определенное условие. |
Базовый оператор цикла
Это простейшая структура цикла в PL/SQL. Блок выполнения начинается с ключевого слова 'LOOP' и заканчивается словом 'END LOOP'. Условие выхода должно быть указано внутри блока выполнения, чтобы управление вышло из цикла, при этом ключевое слово EXIT должно быть указано явно.
LOOP <execution block starts> <EXIT condition based on developer criteria> <execution_block_ends> END LOOP;
Объяснение синтаксиса:
- Ключевое слово 'LOOP' обозначает начало цикла, а 'END LOOP' — его конец.
- Блок выполнения содержит весь код, который необходимо выполнить, включая условие выхода.
- Часть, отвечающая за выполнение, может содержать любой исполняемый оператор.
Примечание: Простой цикл без ключевого слова EXIT — это бесконечный цикл, который никогда не останавливается.
Пример 1: В этом примере мы выводим числа от 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, используя простой цикл. Каждое число выводится столько раз, сколько ему присвоено значение. Верхний предел последовательности задается в части объявления цикла. Для этого мы используем концепцию меток.
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: Выводится сообщение «Программа завершена».







