Oracle PL/SQL FOR LOOP с пример

⚡ Умно обобщение

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

  • 🔢 Най-доброто за: Цикълът FOR е подходящ за известен брой итерации, а не за условие с отворен край.
  • 📏 Обхват: Долна и горна граница определят колко пъти ще се изпълни цикълът.
  • ️ Имплицитен брояч: Променливата на цикъла се декларира автоматично и се увеличава самостоятелно.
  • 🎯 Обхват: Променливата на цикъла съществува само вътре в цикъла.
  • 🔄 ОБРАТНА СТРАНА: Добавянето на REVERSE преди долната граница кара цикъла да отброява обратно.
  • 🪜 Вложени: Циклите могат да бъдат вложени, а вътрешният цикъл се изпълнява напълно за всяка външна итерация.
  • 🚪 Автоматично излизане: Цикълът завършва автоматично, когато променливата напусне диапазона.

Oracle 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 го кара да брои надолу, докато keeping границите в същия ред. И двете форми са показани заедно по-долу, така че разликата е ясна.

Форма Header Ред на стойностите
Възходящ ЗА ВХОД 1 .. 5 1, 2, 3, 4, 5
Низходящо ЗА ОБРАТНО ДВИЖЕНИЕ 1 .. 5 5, 4, 3, 2, 1

Обърнете внимание, че дори с REVERSE, долната граница все още се записва преди горната граница; променя се само посоката на итерация. За цикли, чийто брой не е известен предварително, основен цикъл е по -добрият избор.

Въпроси и Отговори

Не. Цикълът FOR декларира своята променлива имплицитно и тя съществува само вътре в цикъла. Декларирането на променлива със същото име извън цикъла не влияе на тази, използвана от цикъла.

REVERSE кара цикъла да итерира от горната граница надолу към долната граница. Границите все още се записват от ниска към висока граница; само редът, в който се посещават стойностите, е обърнат.

Използвайте FOR цикъл, когато броят на итерациите е предварително известен, например за фиксиран диапазон. Използвайте WHILE цикъл, когато цикълът трябва да продължи, докато условието е изпълнено и броят не е фиксиран.

Да, когато основният цикъл просто брои между две фиксирани стойности. AI може да замени ръчния брояч и EXIT с FOR диапазон, което прави кода по-къс. Уверете се, че границите съвпадат с оригинала.

Не. Променливата на цикъла е само за четене вътре в цикъла, така че присвояването ѝ води до грешка при компилиране. За да промените потока, използвайте отделна променлива или излезте от цикъла с EXIT.

Обобщете тази публикация с: