Oracle PL/SQL FOR LOOP с пример
⚡ Умно обобщение
Oracle PL/SQL FOR цикълът изпълнява блок от код известен брой пъти между долна и горна граница. Променливата на цикъла е декларирана имплицитно и се самоувеличава, така че не е необходим ръчен брояч, а ключовата дума 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 го кара да брои надолу, докато keeping границите в същия ред. И двете форми са показани заедно по-долу, така че разликата е ясна.
| Форма | Header | Ред на стойностите |
|---|---|---|
| Възходящ | ЗА ВХОД 1 .. 5 | 1, 2, 3, 4, 5 |
| Низходящо | ЗА ОБРАТНО ДВИЖЕНИЕ 1 .. 5 | 5, 4, 3, 2, 1 |
Обърнете внимание, че дори с REVERSE, долната граница все още се записва преди горната граница; променя се само посоката на итерация. За цикли, чийто брой не е известен предварително, основен цикъл е по -добрият избор.




