Учебники

11) Oracle PL / SQL LOOP

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

Циклы позволяют выполнять определенную часть кода в программе необходимое количество раз.

В этом уроке мы увидим концепцию цикла в PL / SQL и поток управления в циклах. Ты выучишь-

Введение в концепцию Loops

Концепция Loops обеспечивает следующее преимущество в кодировании.

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

Диаграмма ниже показывает концепцию зацикливания в графической форме

Циклы в PL / SQL

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

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

Loop Control Заявления

Перед изучением концепции циклов обязательно изучите операторы управления циклами. Операторы управления циклом — это операторы, которые фактически управляют потоком выполнения внутри цикла. Ниже приведено подробное описание операторов управления циклом.

ПРОДОЛЖИТЬ

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

EXIT / EXIT WHEN

Это ключевое слово отправляет механизму PL / SQL инструкцию, что всякий раз, когда ядро ​​PL / SQL встречает это ключевое слово, оно немедленно выходит из текущего цикла. Если механизм PL / SQL встречает EXIT во вложенном цикле, то он выйдет из цикла, в котором он был определен, то есть во вложенных циклах, если EXIT во внутреннем цикле выйдет из управления только из внутреннего цикла, но не из внешней петли. «EXIT WHEN» сопровождается выражением, которое дает логический результат. Если результат равен ИСТИНА, тогда элемент управления ВЫХОДИТ.

ПЕРЕЙТИ К

Этот оператор перенесет элемент управления в помеченный оператор («GOTO <label>;»). Это имеет следующие ограничения

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

Использование этого оператора не рекомендуется, если нет других альтернатив, поскольку отслеживание контроля кода в программе будет очень затруднено из-за передачи управления из одной части в другую.

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

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

  • Базовый цикл
  • Для оператора цикла
  • Оператор цикла

Базовое утверждение цикла

Этот оператор цикла является самой простой структурой цикла в 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.
  • Часть выполнения может содержать любой оператор выполнения.

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

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

Циклы в PL / SQL

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:
/

Объяснение кода:

  • Строка кода 2 : объявление переменной «a» как типа данных «NUMBER» и инициализация ее значением «1».
  • Строка кода 4 : печать заявления «Программа запущена».
  • Строка кода 5: Ключевое слово «LOOP» отмечает начало цикла.
  • Строка кода 6: печатает значение «а».
  • Строка кода 7: увеличивает значение «а» на +1.
  • Строка кода 8: проверяет, больше ли значение «а», чем 5.
  • Строка кода 9: Ключевое слово «END LOOP» отмечает конец блока выполнения.
  • Код из строки 6 в строку 8 будет продолжать выполняться до тех пор, пока «а» не достигнет значения 6, так как условие вернет ИСТИНА и элемент управления выйдет из цикла.
  • Строка кода 10: печать заявления «Программа выполнена»

Маркировка петель

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

Циклы в PL / SQL

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

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

  • В приведенном выше синтаксисе цикл out имеет еще один цикл.
  • «<< OUTER_LOOP >>» и «<< INNER_LOOP >>» являются метками этих циклов.

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

Циклы в PL / SQLЦиклы в PL / SQL

DECLARE
a NUMBER:=0;
b NUMBER;
upper-limit NUMBER :=4;
BEGIN
dbms_output.put_line(‘Program started.' ); 
«outerloop»‭	‬
LOOP 
a:=a+1;
b:=l;
«inner loop»
LOOP
EXIT outer_loop WHEN a > upper_limit;
dbms_output.put_line(a);
b:=b+l;
EXIT inner_loop WHEN b>a;
END LOOP;
END LOOP;
dbms_output.put_line('Program completed.');
END;
/

Объяснение кода:

  • Строка кода 2-3 : Объявление переменных «a» и «b» в качестве типа данных «NUMBER».
  • Строка кода 4 : объявление переменной ‘upper_limit’ как типа данных ‘NUMBER’ со значением ‘4’
  • Строка кода 6 : печать заявления «Программа запущена».
  • Строка кода 7: внешний цикл был помечен как «external_loop»
  • Строка кода 9: значение «а» увеличивается на 1.
  • Строка кода 11: Внутренний цикл был помечен как «inner_loop».
  • Строка кода 13: условие ВЫХОДА, которое проверяет, больше ли значение «a», чем значение «upper_limit». Если нет, то он пойдет дальше, иначе он напрямую выйдет из внешнего цикла.
  • Строка кода 14: печать значения «b».
  • Строка кода 15: увеличивает значение «b» на +1.
  • Строка кода 16: условие EXIT, которое проверяет, больше ли значение «b», чем «a». Если это так, то он выйдет из управления из внутреннего цикла.
  • Строка кода 14: печать заявления «Программа выполнена»

Резюме

петля Основной цикл
Критерии ВЫХОДА Выход, когда встречает ключевое слово «EXIT» в исполнительной части
Применение Хорошо использовать, когда выход не основан на каком-либо конкретном условии.