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

Oracle PL/SQL LOOP

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

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.

Základní příkaz smyčky

 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.

Základní příkaz smyčky

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.

Označování smyček

<<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

Označování smyčekOznačování smyček

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.