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

⚡ Розумний підсумок

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

  • 🔢 Найкраще для: Цикл FOR підходить для відомої кількості ітерацій, а не для умови з відкритим кінцем.
  • 📏 Діапазон: Нижня та верхня межі визначають, скільки разів цикл виконується.
  • Неявний лічильник: Змінна циклу оголошується автоматично та збільшується самостійно.
  • 🎯 Сфера застосування: Змінна циклу існує лише всередині циклу.
  • 🔄 ЗВОРОТНИЙ: Додавання REVERSE перед нижньою межею призводить до зворотного відліку циклу.
  • 🪜 Вкладені: Цикли можуть бути вкладеними, і внутрішній цикл виконується повністю для кожної зовнішньої ітерації.
  • 🚪 Автоматичний вихід: Цикл завершується автоматично, коли змінна виходить за межі діапазону.

Oracle Цикл For у PL/SQL

Що таке цикл 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.

Цикл FOR друкує числа від 1 до 5

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. Кожне число друкується стільки разів, скільки його значення.

Приклад вкладеного циклу FOR, частина 1

Приклад вкладеного циклу FOR, частина 2

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 нижня межа все одно записується перед верхньою межею; змінюється лише напрямок ітерації. Для циклів, кількість яких заздалегідь не відома, базовий цикл є кращим вибором.

Поширені запитання

Ні. Цикл FOR неявно оголошує свою змінну, і вона існує лише всередині циклу. Оголошення змінної з тим самим ім'ям зовні не впливає на ту, що використовується циклом.

REVERSE змушує цикл повторюватися від верхньої межі вниз до нижньої. Межі все ще записуються від нижньої до верхньої; лише порядок відвідування значень змінюється на протилежний.

Використовуйте цикл FOR, коли кількість ітерацій відома заздалегідь, наприклад, фіксований діапазон. Використовуйте цикл WHILE, коли цикл має продовжуватися, поки виконується умова, а кількість ітерацій не фіксована.

Так, коли базовий цикл просто рахує між двома фіксованими значеннями. Штучний інтелект може замінити ручний лічильник та EXIT на діапазон FOR, що скоротить код. Переконайтеся, що межі відповідають оригіналу.

Ні. Змінна циклу доступна лише для читання всередині циклу, тому присвоєння їй значення викликає помилку компіляції. Щоб змінити потік дій, використовуйте окрему змінну або вийдіть із циклу за допомогою EXIT.

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