Oracle PL/SQL LOOP із прикладом

Що таке петлі?

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

У цьому посібнику ми розглянемо концепцію циклу в PL/SQL і потік керування в циклах.

Введення в концепцію циклів

Концепція циклів забезпечує наступну перевагу в кодуванні.

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

На наведеній нижче діаграмі наочно показано концепцію циклу

Oracle PL/SQL LOOP

На наведеній вище діаграмі буде перевірено умову циклу, і поки умова циклу задовольняється, блок виконання буде виконано.

У кожній ітерації змінна лічильника циклу, яка фактично вирішує умову циклу, повинна змінитися, щоб зробити контрольний вихід із циклу. У деяких випадках ця змінна лічильника циклу є оператором збільшення/зменшення для попередньо визначеного підрахунку, а в деяких випадках це умова пошуку, яка продовжує виконувати блок, доки він не задовольнить її.

Заяви про контроль циклу

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

ПРОДОВЖИТИ

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

ВИХІД / ВИХІД КОЛИ

Це ключове слово надсилає інструкцію механізму PL/SQL про те, що коли механізм PL/SQL зустрічає це ключове слово, він негайно вийде з поточного циклу. Якщо механізм PL/SQL зустрічає EXIT у вкладеному циклі, тоді він вийде з циклу, у якому його було визначено, тобто у вкладених циклах, надання EXIT у внутрішньому циклі призведе лише до виходу з керування внутрішнього циклу, але не із зовнішнього контуру. Після 'EXIT WHEN' іде вираз, який дає логічний результат. Якщо результат TRUE, то елемент керування вийде.

GOTO

Цей оператор передасть керування оператору з міткою (“GOTO ;”). Це має такі обмеження

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

Використання цього твердження не рекомендується, якщо немає інших альтернатив, оскільки відстеження керування кодом буде дуже складним у програмі через передачу керування від однієї частини до іншої частини.

Типи циклів у PL/SQL

PL / SQL забезпечує наступні три типи петель

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

Цей оператор циклу є найпростішою структурою циклу в 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.
  • Виконавча частина може містити будь-який оператор виконання.

Примітка: Базовий оператор циклу без ключового слова 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:
/

Пояснення коду:

  • Рядок коду 2: Оголошення змінної «a» як типу даних «NUMBER» та ініціалізація її значенням «1».
  • Рядок коду 4: Друк заяви «Програма запущена».
  • Рядок коду 5: Ключове слово "LOOP" позначає початок циклу.
  • Рядок коду 6: Друкує значення 'a'.
  • Рядок коду 7: Збільшує значення 'a' на +1.
  • Рядок коду 8: Перевіряє, чи значення «a» перевищує 5.
  • Рядок коду 9: Ключове слово "END LOOP" позначає кінець блоку виконання.
  • Код з рядка 6 по рядок 8 продовжуватиме виконуватися, доки «a» не досягне значення 6, оскільки умова поверне TRUE, і елемент керування ВИХОДИТЬ із циклу.
  • Рядок коду 10: Друк повідомлення «Програма виконана»

Маркування петель

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

Маркування петель

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

Пояснення синтаксису:

  • У наведеному вище синтаксисі вихідний цикл має ще один цикл усередині.
  • "< >' і '< >' — мітки цих циклів.

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

Маркування петельМаркування петель

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: Зовнішній цикл було позначено як «outer_loop»
  • Рядок коду 9: Значення 'a' збільшується на 1.
  • Рядок коду 11: Внутрішній цикл було позначено як «inner_loop».
  • Рядок коду 13: Умова EXIT, яка перевіряє, чи значення «a» перевищує значення «upper_limit». Якщо ні, тоді він піде далі, інакше він виходить із зовнішнього циклу безпосередньо.
  • Рядок коду 14: Друк значення "b".
  • Рядок коду 15: Збільшує значення 'b' на +1.
  • Рядок коду 16: Умова EXIT, яка перевіряє, чи значення «b» вище за «a». Якщо так, тоді він вийде з контролю внутрішнього циклу.
  • Рядок коду 14: Друк повідомлення «Програма виконана»

Підсумки

Петля Базовий цикл
Критерії ВИХОДУ Вийти, коли зустрічає ключове слово "EXIT" у частині виконання
Використання Добре використовувати, коли вихід не базується на будь-якій конкретній умові.