Oracle PL/SQL LOOP s příkladem
Co jsou smyčky?
Smyčky umožňují, aby se určitá část kódu v programu spustila požadovaný počet opakování.
V tomto tutoriálu se podíváme na koncept smyčky v PL/SQL a tok řízení ve smyčkách.
Úvod do konceptu Loops
Koncept smyček poskytuje následující výhodu v kódování.
- Znovupoužitelnost kódu
- Zmenšená velikost kódu
- Snadný tok ovládání
- Snížená složitost
Níže uvedený diagram znázorňuje koncept smyčkování obrázkovým způsobem
Ve výše uvedeném diagramu bude zkontrolována podmínka smyčky, a pokud bude splněna podmínka smyčky, provede se prováděcí blok.
V každé iteraci by se proměnná čítače smyčky, která ve skutečnosti rozhoduje o podmínce smyčky, měla změnit, aby řízení opustilo smyčku. V některých případech je tato proměnná čítače smyčky operátor přírůstku/snižování pro předem definovaný počet a v některých případech je to vyhledávací podmínka, která pokračuje ve vykonávání bloku, dokud ji nesplní.
Prohlášení o smyčce
Než se naučíte koncept smyček, je nutné se naučit příkazy řízení smyček. Příkazy řízení smyčky jsou ty, které skutečně řídí tok provádění uvnitř smyčky. Níže je podrobný popis příkazů řízení smyčky.
POKRAČOVAT
Toto klíčové slovo odešle instrukci do PL/SQL enginu, že kdykoli PL/SQL motor narazí na toto klíčové slovo uvnitř smyčky, pak přeskočí zbývající kód ve spouštěcím bloku kódu a okamžitě začne další iterace. To se použije hlavně v případě, že kód uvnitř smyčky chce být pro určité iterační hodnoty přeskočen.
EXIT / EXIT WHEN
Toto klíčové slovo odešle instrukci do PL/SQL enginu, že kdykoli PL/SQL motor narazí na toto klíčové slovo, okamžitě opustí aktuální smyčku. Pokud motor PL/SQL narazí na EXIT ve vnořené smyčce, opustí smyčku, ve které byl definován, tj. ve vnořených smyčkách, zadání EXIT ve vnitřní smyčce pouze ukončí řízení z vnitřní smyčky, ale ne z vnější smyčky. Po 'EXIT WHEN' následuje výraz, který dává booleovský výsledek. Pokud je výsledek PRAVDA, ovládací prvek EXIT.
GOTO
Tento příkaz přenese ovládání na označený příkaz („GOTO ;“). To má následující omezení
- Přenos řízení lze provést pouze v rámci podprogramů.
- Převod kontroly nelze provést z části zpracování výjimek do části provádění
Použití tohoto prohlášení se nedoporučuje, pokud neexistují žádné jiné alternativy, protože sledovatelnost kontroly kódu bude v programu velmi obtížná kvůli přenosu kontroly z jedné části na druhou.
Typy smyček v PL/SQL
PL / SQL poskytuje následující tři typy smyček
- Základní příkaz smyčky
- Příkaz pro smyčku
- Příkaz while loop
Základní příkaz smyčky
Tento příkaz smyčky je nejjednodušší strukturou smyčky v PL/SQL. Prováděcí blok začíná klíčovým slovem 'LOOP' a končí klíčovým slovem 'END LOOP'.
Výstupní podmínka by měla být dána uvnitř tohoto prováděcího bloku, aby bylo možné ovládat výstup ze smyčky.
Aby bylo možné opustit smyčku, potřebuje, aby bylo v prováděcí části výslovně uvedeno klíčové slovo EXIT.
LOOP <execution block starts> <EXIT condition based on developer criteria> <execution_block_ends> END LOOP;
Vysvětlení syntaxe:
- Ve výše uvedené syntaxi klíčové slovo „LOOP“ označuje začátek smyčky a „END LOOP“ označuje konec smyčky.
- Prováděcí blok obsahuje veškerý kód, který je třeba provést, včetně podmínky EXIT.
- Prováděcí část může obsahovat libovolný příkaz provedení.
Poznámka: Základní příkaz smyčky bez klíčového slova EXIT bude NEKONEČNÁ SMYČKA, která se nikdy nezastaví.
Příklad 1: V tomto příkladu vytiskneme číslo od 1 do 5 pomocí příkazu základní smyčky. Za tímto účelem spustíme následující kód.
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: /
Vysvětlení kódu:
- Řádek kódu 2: Deklaruje proměnnou 'a' jako datový typ 'NUMBER' a inicializuje ji hodnotou '1'.
- Řádek kódu 4: Tisk prohlášení „Program spuštěn“.
- Řádek kódu 5: Klíčové slovo 'LOOP' označuje začátek smyčky.
- Řádek kódu 6: Vytiskne hodnotu 'a'.
- Řádek kódu 7: Zvýší hodnotu „a“ o +1.
- Řádek kódu 8: Zkontroluje, zda je hodnota 'a' větší než 5.
- Řádek kódu 9: Klíčové slovo 'END LOOP' označuje konec bloku provádění.
- Kód z řádku 6 do řádku 8 bude pokračovat v provádění, dokud „a“ nedosáhne hodnoty 6, protože podmínka vrátí hodnotu TRUE a ovládací prvek opustí smyčku.
- Řádek kódu 10: Tisk prohlášení „Program dokončen“
Označování smyček
V PL/SQL mohou být smyčky označeny. Štítek by měl být uzavřen mezi „<<“ a „>>“. Označení smyček zejména v kódech vnořených smyček poskytne větší čitelnost. Návěští lze zadat v příkazu EXIT pro ukončení této konkrétní smyčky. Pomocí štítku lze provést ovládání tak, aby přímo opustilo vnější smyčku vnořených smyček z libovolného místa uvnitř smyček, a to zadáním příkazu exit následovaném popisem vnější smyčky.
<<OUTER_LOOP>> LOOP <execution_block_starts> . <<INNER_LOOP>> LOOP --inner <execution_part> END LOOP; . <executi_block_ends> END LOOP;
Vysvětlení syntaxe:
- Ve výše uvedené syntaxi má výstupní smyčka ještě jednu smyčku uvnitř.
- Značka '< >' a '< >' jsou popisky těchto smyček.
Příklad 1: V tomto příkladu vytiskneme číslo začínající od 1 pomocí příkazu Basic loop. Každé číslo bude vytištěno tolikrát, kolikrát je jeho hodnota. Horní hranice řady je pevně stanovena v části deklarace programu. Pojďme se naučit, jak toho můžeme pomocí konceptu štítků dosáhnout. Za tímto účelem spustíme následující kód
DECLARE a NUMBER:=0; b NUMBER; upper-limit NUMBER :=4; BEGIN dbms_output.put_line(‘Program started.' ); «outerloop» LOOP a:=a+1; b:=l; «inner loop» LOOP EXIT outer_loop WHEN a > upper_limit; dbms_output.put_line(a); b:=b+l; EXIT inner_loop WHEN b>a; END LOOP; END LOOP; dbms_output.put_line('Program completed.'); END; /
Vysvětlení kódu:
- Řádek kódu 2-3: Deklarování proměnné 'a' a 'b' jako datový typ 'NUMBER'.
- Řádek kódu 4: Deklarování proměnné 'upper_limit' jako datového typu 'NUMBER' s hodnotou '4'
- Řádek kódu 6: Tisk prohlášení „Program spuštěn“.
- Řádek kódu 7: Vnější smyčka byla označena jako „outer_loop“
- Řádek kódu 9: Hodnota 'a' se zvýší o 1.
- Řádek kódu 11: Vnitřní smyčka byla označena jako „inner_loop“.
- Řádek kódu 13: EXIT podmínka, která kontroluje, zda je hodnota 'a' vyšší než hodnota 'upper_limit'. Pokud ne, půjde dále, jinak opustí vnější smyčku přímo.
- Řádek kódu 14: Tisk hodnoty 'b'.
- Řádek kódu 15: Zvyšuje hodnotu 'b' o +1.
- Řádek kódu 16: EXIT podmínka, která kontroluje, zda je hodnota 'b' vyšší než 'a'. Pokud ano, opustí řízení z vnitřní smyčky.
- Řádek kódu 14: Tisk prohlášení „Program dokončen“
Shrnutí
Smyčka | Základní smyčka |
EXIT Kritéria | Ukončete, když v prováděcí části narazí na klíčové slovo 'EXIT' |
Používání | Dobré použít, když výstup není založen na žádné konkrétní podmínce. |