Oracle PL/SQL FOR LOOP із прикладом
⚡ Розумний підсумок
Oracle Цикл FOR у PL/SQL виконує блок коду відому кількість разів між нижньою та верхньою межами. Змінна циклу оголошується неявно та сама збільшується, тому ручний лічильник не потрібен, а ключове слово REVERSE дозволяє циклу рахувати у зворотному напрямку.
Що таке цикл FOR?
Оператор «FOR LOOP» найкраще підходить, коли потрібно виконати код певну кількість разів, а не на основі якоїсь іншої умови.
У цьому циклі задаються нижня та верхня межі, і цикл виконується, якщо змінна циклу знаходиться в межах цього діапазону.
Змінна циклу є самоінкрементною, тому явна операція збільшення не потрібна. Змінну циклу не потрібно оголошувати, оскільки вона оголошується неявно.
FOR <loop_variable> in <lower_limit> .. <higher_limit> LOOP <execution block starts> . . . <execution_block_ends> END LOOP;
Пояснення синтаксису:
- Ключове слово «FOR» позначає початок циклу, а «END LOOP» — його кінець.
- Змінна циклу обчислюється щоразу перед виконанням частини виконання.
- Блок виконання містить весь код, який потрібно виконати, і може містити будь-який виконуваний оператор.
- Змінна loop_variable оголошується неявно під час виконання циклу, а її область видимості знаходиться лише всередині циклу.
- Коли змінна циклу виходить за межі діапазону, керування виходить з циклу.
- Цикл можна змусити працювати у зворотному порядку, додавши ключове слово 'REVERSE' перед нижньою_ліміткою.
Приклад 1: У цьому прикладі ми друкуємо числа від 1 до 5 за допомогою оператора циклу FOR.
BEGIN dbms_output.put_line('Program started.'); FOR a IN 1 .. 5 LOOP dbms_output.put_line(a); END LOOP; dbms_output.put_line('Program completed.'); END; /
Code Пояснення:
- Code рядок 2: Виведення повідомлення «Програма запущена».
- Code рядок 3: Ключове слово 'FOR' позначає початок циклу, і оголошується змінна циклу 'a'. Тепер вона приймає значення від 1 до 5.
- Code рядок 5: Друкує значення 'a'.
- Code рядок 6: Ключове слово 'END LOOP' позначає кінець блоку виконання.
- Рядок 5 продовжує виконуватися, доки 'a' не досягне значення 6, після чого умова не виконується, і керування виходить з циклу.
- Code рядок 7: Виведення повідомлення «Програма завершена».
Вкладені цикли
Оператори циклів також можуть бути вкладеними. Зовнішній та внутрішні цикли можуть бути різних типів. У вкладеному циклі для кожної ітерації зовнішнього циклу внутрішній цикл виконується повністю.
LOOP --outer <execution block starts> LOOP --inner <execution_part> END LOOP; <execution_block_ends> END LOOP;
Пояснення синтаксису:
- Зовнішня петля має ще одну петлю всередині.
- Цикли можуть бути будь-якого типу, а функціональність виконання однакова.
Приклад 1: У цьому прикладі ми друкуємо числа від 1 до 3 за допомогою оператора циклу FOR. Кожне число друкується стільки разів, скільки його значення.
DECLARE b NUMBER; BEGIN dbms_output.put_line('Program started'); FOR a IN 1..3 LOOP b:= 1; WHILE (a>=b) LOOP dbms_output.put_line(a); b:= b+1; END LOOP; END LOOP; dbms_output.put_line('Program completed'); END; /
Code Пояснення:
- Code рядок 2: Оголошення змінної 'b' як типу даних 'NUMBER'.
- Code рядок 4: Виведення повідомлення «Програма запущена».
- Code рядок 5: Ключове слово 'FOR' позначає початок циклу, і оголошується змінна циклу 'a'. Тепер вона приймає значення від 1 до 3.
- Code рядок 7: Кожного разу скидання значення «b» на «1».
- Code рядок 8: Внутрішня поки петля перевіряє умову a>=b.
- Code рядок 10: Друкує значення 'a', якщо задовольняється зазначена вище умова.
- Code рядок 14: Виведення повідомлення «Програма завершена».
Цикл FOR та зворотний цикл FOR
За замовчуванням цикл FOR рахує вгору від нижньої межі до верхньої. Додавання ключового слова REVERSE призводить до зменшення, водночас зберігаючиping граничні значення в тому ж порядку. Обидві форми показані разом нижче, щоб різниця була очевидною.
| Форма | Header | Порядок значень |
|---|---|---|
| висхідна | ДЛЯ ВХОДУ 1 .. 5 | 1, 2, 3, 4, 5 |
| спадний | ДЛЯ ЗВОРОТНЬОГО РУХУ 1 .. 5 | 5, 4, 3, 2, 1 |
Зверніть увагу, що навіть з REVERSE нижня межа все одно записується перед верхньою межею; змінюється лише напрямок ітерації. Для циклів, кількість яких заздалегідь не відома, базовий цикл є кращим вибором.





