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

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

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

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

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

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

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

На діаграмі нижче показано туалетping концепція в образотворчому вигляді

Oracle PL/SQL LOOP

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

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

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

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

ПРОДОВЖИТИ

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

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

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

GOTO

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

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

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

Типи циклів у 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:
/

Code Пояснення:

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

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: Умова EXIT, яка перевіряє, чи значення «b» вище за «a». Якщо так, тоді він вийде з контролю внутрішнього циклу.
  • Code рядок 14: Друк повідомлення «Програма виконана»

Резюме

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

Підсумуйте цей пост за допомогою: