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 забезпечує такі три типи циклів:
- Базовий оператор циклу
- Оператор циклу for
- Оператор циклу while
У таблиці нижче порівнюються ці три варіанти, перш ніж детально розглянути базовий цикл.
| Петля | Критерії виходу | Найкраще використовувати, коли |
|---|---|---|
| Базовий цикл | Явний ВИХІД у блоці | Вихід не базується на фіксованій кількості чи умові |
| Цикл 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.
- Виконувана частина може містити будь-який виконуваний оператор.
Примітка: Базовий оператор циклу без ключового слова 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 для виходу з цього конкретного циклу, щоб керування могло безпосередньо вийти із зовнішнього циклу вкладеної структури, вказавши команду 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: Умова ВИХОДУ, яка перевіряє, чи 'a' більше значення 'upper_limit'. Якщо ні, то виконується подальша робота; інакше відбувається прямий вихід із зовнішнього циклу.
- Code рядок 14: Друк значення "b".
- Code рядок 15: Збільшує значення 'b' на 1.
- Code рядок 16: Умова ВИХОДУ, яка перевіряє, чи 'b' більше за 'a'. Якщо так, то відбувається вихід із внутрішнього циклу.
- Code рядок 19: Виведення повідомлення «Програма завершена».







