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

Какво представляват Loops?
Циклите позволяват определена част от кода в програмата да се изпълнява желания брой пъти. В този урок ще разгледаме концепцията за цикли в PL/SQL и потока на управление в циклите.
Въведение в концепцията за цикли
Концепцията за цикли предоставя следните предимства при кодирането:
- Повторна употреба на код.
- Намален размер на кода.
- Лесен поток на управление.
- Намалена сложност.
Диаграмата по-долу показва тоалетнатаping концепция.
На диаграмата по-горе условието на цикъла се проверява и докато то е изпълнено, блокът за изпълнение се изпълнява.
Във всяка итерация променливата на брояча на цикъла, която определя кое условие на цикъла трябва да се промени, за да може управлението да излезе от него. В някои случаи този брояч е инкремент или декремент за предварително дефиниран брой, а в други е условие за търсене, което продължава изпълнението на блока, докато не бъде изпълнено.
Изявления за контрол на контура
Преди да научите концепцията на циклите, е важно да научите операторите за управление на цикъла. Тези оператори контролират потока на изпълнение вътре в цикъла.
ПРОДЪЛЖАВАТ
Тази ключова дума инструктира PL/SQL енджина, че когато срещне CONTINUE в цикъл, той пропуска останалия код в блока за изпълнение и започва следващата итерация незабавно. Това се използва главно, когато кодът в цикъла трябва да бъде пропуснат за определени стойности на итерациите.
ИЗХОД / ИЗЛЕЗ КОГА
Тази ключова дума инструктира PL/SQL енджин незабавно да излезе от текущия цикъл. Във вложен цикъл, EXIT във вътрешния цикъл излиза само от вътрешния цикъл, а не от външния. „EXIT WHEN“ е последвано от израз, който дава булев резултат; ако резултатът е TRUE, управлението излиза.
GOTO
Този оператор прехвърля контрола към етикетиран оператор („GOTO ;“). Той има следните ограничения:
- Прехвърлянето на контрол може да се извърши само в рамките на подпрограмите.
- Прехвърлянето на контрол не може да се извърши от частта за обработка на изключения към частта за изпълнение.
Използването на това твърдение не се препоръчва, освен ако няма алтернатива, тъй като контролът на кода tracУправляемостта става много трудна, когато контролът се прехвърля от една част на друга.
Видове цикъл в PL/SQL
PL / SQL предоставя следните три вида цикли:
- Основен оператор за цикъл
- Изявление за цикъл
- Изявление за цикъл while
Таблицата по-долу сравнява трите, преди основният цикъл да бъде разгледан подробно.
| Контур | Критерии за изход | Най-добре се използва, когато |
|---|---|---|
| Основен цикъл | Изричен EXIT в блока | Изходът не е базиран на фиксиран брой или условие |
| FOR цикъл | Броячът достига края на диапазона си | Броят на итерациите е известен предварително |
| цикъл WHILE | Условието става невярно | Цикълът трябва да се изпълнява, докато е изпълнено условие |
Основен оператор за цикъл
Това е най-простата структура на цикъл в PL/SQL. Блокът за изпълнение започва с ключовата дума „LOOP“ и завършва с „END LOOP“. Условието за изход трябва да бъде зададено вътре в блока за изпълнение, така че управлението да излезе от цикъла, а ключовата дума EXIT трябва да бъде зададена изрично.
LOOP <execution block starts> <EXIT condition based on developer criteria> <execution_block_ends> END LOOP;
Обяснение на синтаксиса:
- Ключовата дума „LOOP“ маркира началото на цикъла, а „END LOOP“ – края му.
- Блокът за изпълнение съдържа целия код, който трябва да се изпълни, включително условието EXIT.
- Изпълнителната част може да съдържа произволен изпълним оператор.
Забележка: Един основен цикъл без ключова дума EXIT е безкраен цикъл, който никога не спира.
Пример 1: В този пример отпечатваме числа от 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, използвайки основен цикъл. Всяко число се отпечатва толкова пъти, колкото е стойността му. Горната граница на серията е фиксирана в декларационната част. Използваме концепцията за етикети, за да постигнем това.
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: Отпечатване на изявлението „Програмата е завършена“.






