Oracle PL/SQL LOOP із прикладом
Що таке петлі?
Цикли дозволяють певній частині коду в програмі виконуватися бажану кількість разів.
У цьому посібнику ми розглянемо концепцію циклу в PL/SQL і потік керування в циклах.
Введення в концепцію циклів
Концепція циклів забезпечує наступну перевагу в кодуванні.
- Повторне використання коду
- Зменшений розмір коду
- Легкий потік керування
- Знижена складність
На наведеній нижче діаграмі наочно показано концепцію циклу
На наведеній вище діаграмі буде перевірено умову циклу, і поки умова циклу задовольняється, блок виконання буде виконано.
У кожній ітерації змінна лічильника циклу, яка фактично вирішує умову циклу, повинна змінитися, щоб зробити контрольний вихід із циклу. У деяких випадках ця змінна лічильника циклу є оператором збільшення/зменшення для попередньо визначеного підрахунку, а в деяких випадках це умова пошуку, яка продовжує виконувати блок, доки він не задовольнить її.
Заяви про контроль циклу
Перш ніж вивчати концепцію циклів, необхідно ознайомитися з операторами керування циклом. Оператори керування циклом — це ті, які фактично керують потоком виконання всередині циклу. Нижче наведено детальний опис операторів керування циклом.
ПРОДОВЖИТИ
Це ключове слово надсилає інструкцію механізму PL/SQL про те, що коли механізм PL/SQL зустрічає це ключове слово в циклі, він пропускатиме код, що залишився у блоці виконання коду, і наступна ітерація розпочнеться негайно. Це в основному буде використовуватися, якщо код всередині циклу хоче бути пропущений для певних значень ітерації.
ВИХІД / ВИХІД КОЛИ
Це ключове слово надсилає інструкцію механізму PL/SQL про те, що коли механізм PL/SQL зустрічає це ключове слово, він негайно вийде з поточного циклу. Якщо механізм PL/SQL зустрічає EXIT у вкладеному циклі, тоді він вийде з циклу, у якому його було визначено, тобто у вкладених циклах, надання EXIT у внутрішньому циклі призведе лише до виходу з керування внутрішнього циклу, але не із зовнішнього контуру. Після 'EXIT WHEN' іде вираз, який дає логічний результат. Якщо результат TRUE, то елемент керування вийде.
GOTO
Цей оператор передасть керування оператору з міткою (“GOTO ;”). Це має такі обмеження
- Передача управління можлива тільки в межах підпрограм.
- Передачу керування не можна здійснити від частини обробки винятків до частини виконання
Використання цього твердження не рекомендується, якщо немає інших альтернатив, оскільки відстеження керування кодом буде дуже складним у програмі через передачу керування від однієї частини до іншої частини.
Типи циклів у PL/SQL
PL / SQL забезпечує наступні три типи петель
- Базовий оператор циклу
- Оператор циклу 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: /
Пояснення коду:
- Рядок коду 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" у частині виконання |
Використання | Добре використовувати, коли вихід не базується на будь-якій конкретній умові. |