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

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

PL/SQL циклите изпълняват секция от код многократно за определен брой пъти. PL/SQL предлага основни цикли FOR и WHILE, контролирани от CONTINUE, EXIT, EXIT WHEN и GOTO, като циклите могат да бъдат етикетирани за по-чисто управление на вложени структури.

  • 🔁 Основание: Цикълът изпълнява блок от код многократно, намалявайки размера и сложността на кода.
  • 🧭 Брояч на цикли: Променливата брояч определя условието на цикъла и трябва да се промени, за да може цикълът да излезе от него.
  • ⏭️ ПРОДЪЛЖЕТЕ: Пропуска останалата част от текущата итерация и започва следващата.
  • 🚪 ИЗХОД / ИЗХОД КОГАТО: Напуска цикъла незабавно, по избор, когато е изпълнено булево условие.
  • ???? ️ Етикети: Етикет на цикъл между двойни ъглови скоби позволява на EXIT да се насочи към външен цикъл.
  • ♾️ Основен цикъл: Изпълнява се, докато се достигне изричен EXIT; без такъв се повтаря безкрайно.
  • 🧩 Три вида: Основният цикъл, цикълът FOR и цикълът WHILE обхващат често срещаните модели.

Oracle PL/SQL цикъл

Какво представляват Loops?

Циклите позволяват определена част от кода в програмата да се изпълнява желания брой пъти. В този урок ще разгледаме концепцията за цикли в PL/SQL и потока на управление в циклите.

Въведение в концепцията за цикли

Концепцията за цикли предоставя следните предимства при кодирането:

  • Повторна употреба на код.
  • Намален размер на кода.
  • Лесен поток на управление.
  • Намалена сложност.

Диаграмата по-долу показва тоалетнатаping концепция.

клозетping Поток от концепции в PL/SQL

На диаграмата по-горе условието на цикъла се проверява и докато то е изпълнено, блокът за изпълнение се изпълнява.

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

Изявления за контрол на контура

Преди да научите концепцията на циклите, е важно да научите операторите за управление на цикъла. Тези оператори контролират потока на изпълнение вътре в цикъла.

ПРОДЪЛЖАВАТ

Тази ключова дума инструктира PL/SQL енджина, че когато срещне CONTINUE в цикъл, той пропуска останалия код в блока за изпълнение и започва следващата итерация незабавно. Това се използва главно, когато кодът в цикъла трябва да бъде пропуснат за определени стойности на итерациите.

ИЗХОД / ИЗЛЕЗ КОГА

Тази ключова дума инструктира PL/SQL енджин незабавно да излезе от текущия цикъл. Във вложен цикъл, EXIT във вътрешния цикъл излиза само от вътрешния цикъл, а не от външния. „EXIT WHEN“ е последвано от израз, който дава булев резултат; ако резултатът е TRUE, управлението излиза.

GOTO

Този оператор прехвърля контрола към етикетиран оператор („GOTO ;“). Той има следните ограничения:

  • Прехвърлянето на контрол може да се извърши само в рамките на подпрограмите.
  • Прехвърлянето на контрол не може да се извърши от частта за обработка на изключения към частта за изпълнение.

Използването на това твърдение не се препоръчва, освен ако няма алтернатива, тъй като контролът на кода tracУправляемостта става много трудна, когато контролът се прехвърля от една част на друга.

Видове цикъл в PL/SQL

PL / SQL предоставя следните три вида цикли:

Таблицата по-долу сравнява трите, преди основният цикъл да бъде разгледан подробно.

Контур Критерии за изход Най-добре се използва, когато
Основен цикъл Изричен EXIT в блока Изходът не е базиран на фиксиран брой или условие
FOR цикъл Броячът достига края на диапазона си Броят на итерациите е известен предварително
цикъл WHILE Условието става невярно Цикълът трябва да се изпълнява, докато е изпълнено условие

Основен оператор за цикъл

Това е най-простата структура на цикъл в PL/SQL. Блокът за изпълнение започва с ключовата дума „LOOP“ и завършва с „END LOOP“. Условието за изход трябва да бъде зададено вътре в блока за изпълнение, така че управлението да излезе от цикъла, а ключовата дума EXIT трябва да бъде зададена изрично.

Основна структура на цикъла в PL/SQL

LOOP
<execution block starts>
<EXIT condition based on developer criteria>
<execution_block_ends>
END LOOP;

Обяснение на синтаксиса:

  • Ключовата дума „LOOP“ маркира началото на цикъла, а „END LOOP“ – края му.
  • Блокът за изпълнение съдържа целия код, който трябва да се изпълни, включително условието EXIT.
  • Изпълнителната част може да съдържа произволен изпълним оператор.

Забележка: Един основен цикъл без ключова дума EXIT е безкраен цикъл, който никога не спира.

Пример 1: В този пример отпечатваме числа от 1 до 5, използвайки основен оператор на цикъл.

Основни числа за печат на цикли от 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;
/

Code Обяснение:

  • Code ред 2: Деклариране на променливата 'a' като 'NUMBER' и инициализирането ѝ със стойност '1'.
  • Code ред 4: Отпечатване на изявлението „Програмата е стартирана“.
  • Code ред 5: Ключовата дума „LOOP“ маркира началото на цикъла.
  • Code ред 6: Отпечатва стойността на 'a'.
  • Code ред 7: Увеличава стойността на „a“ с 1.
  • Code ред 8: Проверява дали стойността на 'a' е по-голяма от 5.
  • Code ред 9: Ключовата дума „END LOOP“ маркира края на блока за изпълнение.
  • Редове от 6 до 8 продължават да се изпълняват, докато 'a' достигне 6, при което условието връща TRUE и управлението излиза от цикъла.
  • Code ред 10: Отпечатване на изявлението „Програмата е завършена“.

Етикетиране на контури

В PL/SQL циклите могат да бъдат етикетирани. Етикетът трябва да бъде ограден между „<<“ и „>>“. Етикетирането на цикли, особено във вложени цикли, осигурява по-голяма четимост. Етикетът може да бъде даден в команда EXIT за изход от този конкретен цикъл, така че управлението може да излезе директно от външния цикъл на вложена структура, като се даде командата EXIT, последвана от етикета на външния цикъл.

Етикетирана вложена структура на цикъл

<<OUTER_LOOP>>
LOOP
<execution_block_starts>
.
<<INNER_LOOP>>
LOOP --inner
<execution_part>
END LOOP;
.
<execution_block_ends>
END LOOP;

Обяснение на синтаксиса:

  • Външният контур има още един контур вътре в него.
  • '< >' и '<' >' са етикетите на тези цикли.

Пример 1: В този пример, ние отпечатваме числа, започващи от 1, използвайки основен цикъл. Всяко число се отпечатва толкова пъти, колкото е стойността му. Горната граница на серията е фиксирана в декларационната част. Използваме концепцията за етикети, за да постигнем това.

Пример за етикетиран цикъл, част 1Пример за етикетиран цикъл, част 2

DECLARE
a NUMBER:= 0;
b NUMBER;
upper_limit NUMBER := 4;
BEGIN
dbms_output.put_line('Program started.');
<<outer_loop>>
LOOP
a:= a+1;
b:= 1;
<<inner_loop>>
LOOP
EXIT outer_loop WHEN a > upper_limit;
dbms_output.put_line(a);
b:= b+1;
EXIT inner_loop WHEN b>a;
END LOOP;
END LOOP;
dbms_output.put_line('Program completed.');
END;
/

Code Обяснение:

  • Code ред 2-3: Деклариране на променливите „a“ и „b“ като данни от тип „NUMBER“.
  • Code ред 4: Деклариране на променливата 'upper_limit' като 'NUMBER' със стойност '4'.
  • Code ред 6: Отпечатване на изявлението „Програмата е стартирана“.
  • Code ред 7: Външният цикъл е обозначен като „outer_loop“.
  • Code ред 9: Стойността на 'a' се увеличава с 1.
  • Code ред 11: Вътрешният цикъл е обозначен като „inner_loop“.
  • Code ред 13: Условие за ИЗХОД, което проверява дали 'a' е по-високо от стойността на 'upper_limit'. Ако не, се продължава по-нататък; в противен случай се излиза директно от външния цикъл.
  • Code ред 14: Отпечатване на стойността на „b“.
  • Code ред 15: Увеличава стойността на „b“ с 1.
  • Code ред 16: ИЗХОДНО условие, което проверява дали 'b' е по-високо от 'a'. Ако е така, се излиза от вътрешния цикъл.
  • Code ред 19: Отпечатване на изявлението „Програмата е завършена“.

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

EXIT напуска цикъла безусловно. EXIT WHEN го напуска само когато следният булев израз е истина, което премахва необходимостта от отделен IF около обикновения EXIT.

Етикетът позволява на EXIT във вътрешен цикъл да напусне именуван външен цикъл с една стъпка. Той също така прави вложения код много по-лесен за четене от... tracкралски обикновени оператори END LOOP.

Ако блокът няма EXIT или броячът никога не достигне условието за изход, цикълът никога не спира. Винаги се уверявайте, че броячът се променя към условието EXIT WHEN.

Често, да. Изкуственият интелект може tracдали броячът се придвижва към условието EXIT и предупреждава, когато цикълът няма достижим изход, въпреки че изход, зависим от данни, все още се нуждае от тестово изпълнение, за да се потвърди.

CONTINUE пропуска останалата част от текущата итерация и преминава към следващата. Полезно е, когато определени стойности трябва да бъдат игнорирани, без да се напуска цикълът напълно.

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