Oracle PL/SQL LOOP példával

Mik azok a hurkok?

A ciklusok lehetővé teszik, hogy a programban a kód egy bizonyos része a kívánt számú alkalommal lefusson.

Ebben az oktatóanyagban látni fogjuk a PL/SQL cikluskoncepcióját és a vezérlés folyamatát a ciklusokban.

Bevezetés a hurkok koncepciójába

A hurkok koncepciója a következő előnyöket nyújtja a kódolásban.

  • A kód újrafelhasználhatósága
  • Csökkentett kódméret
  • Könnyű vezérlés
  • Csökkentett komplexitás

Az alábbi ábra a hurkolási koncepciót mutatja be képi formában

Oracle PL/SQL LOOP

A fenti ábrán a ciklusfeltételt ellenőrizzük, és amíg a ciklusfeltétel teljesül, a végrehajtási blokk végrehajtásra kerül.

Minden iterációban a hurok feltételét ténylegesen meghatározó hurokszámláló változónak módosulnia kell, hogy a vezérlő kilépjen a hurokból. Egyes esetekben ez a hurokszámláló változó egy előre definiált számláló növekmény/csökkentő operátora, és bizonyos esetekben ez egy keresési feltétel, amely addig folytatja a blokk végrehajtását, amíg az eleget nem tesz.

Hurokvezérlő nyilatkozatok

A hurkok fogalmának megismerése előtt kötelező megtanulni a ciklusvezérlő utasításokat. A ciklusvezérlő utasítások azok, amelyek ténylegesen szabályozzák a cikluson belüli végrehajtás folyamatát. Az alábbiakban a ciklusvezérlő utasítások részletes leírása található.

TOVÁBB

Ez a kulcsszó azt az utasítást küldi a PL/SQL motornak, hogy amikor a PL/SQL motor találkozik ezzel a kulcsszóval a cikluson belül, akkor kihagyja a kód végrehajtási blokkjában lévő maradék kódot, és azonnal elindul a következő iteráció. Ez főleg akkor lesz használatos, ha a cikluson belüli kódot bizonyos iterációs értékeknél ki akarja hagyni.

EXIT / EXIT WHEN

Ez a kulcsszó azt az utasítást küldi a PL/SQL motornak, hogy amikor a PL/SQL motor találkozik ezzel a kulcsszóval, azonnal kilép az aktuális ciklusból. Ha a PL/SQL motor egy beágyazott ciklusban találkozik az EXIT-tel, akkor abból a ciklusból fog kilépni, amelyben definiálták, azaz beágyazott ciklusban, ha a belső ciklusban az EXIT parancsot adjuk, az csak a belső ciklusból lép ki a vezérlésből, de nem a külső hurokból. Az „EXIT WHEN” kifejezést egy logikai eredményt adó kifejezés követi. Ha az eredmény IGAZ, akkor a vezérlő EXIT.

GOTO

Ez az utasítás átviszi a vezérlőt a címkézett utasításra ("GOTO ;)"). Ez a következő korlátozásokkal rendelkezik

  • A vezérlés átadása csak az alprogramokon belül történhet.
  • Az irányítást nem lehet a kivételkezelő részről a végrehajtási részre átvinni

Ennek az utasításnak a használata nem javasolt, hacsak nincs más alternatíva, mivel a kódvezérlés nyomon követhetősége nagyon nehéz lesz a programban az irányítás egyik részről a másikra történő átadása miatt.

A hurok típusai PL/SQL-ben

PL / SQL a következő három típusú hurkot biztosít

Alap hurok utasítás

Ez a ciklusutasítás a PL/SQL legegyszerűbb ciklusszerkezete. A végrehajtási blokk a 'LOOP' kulcsszóval kezdődik, és az 'END LOOP' kulcsszóval végződik.

A kilépési feltételt ebben a végrehajtási blokkban kell megadni, hogy a vezérlés kilépjen a hurokból.

A ciklusból való kilépéshez az EXIT kulcsszót kifejezetten meg kell adni a végrehajtási részben.

Alap hurok utasítás

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

Szintaxis magyarázata:

  • A fenti szintaxisban a „LOOP” kulcsszó a ciklus kezdetét, az „END LOOP” pedig a ciklus végét jelöli.
  • A végrehajtási blokk tartalmazza az összes végrehajtandó kódot, beleértve az EXIT feltételt is.
  • A végrehajtási rész bármilyen végrehajtási utasítást tartalmazhat.

Jegyzet: Az EXIT kulcsszó nélküli alapvető hurokutasítás egy INFINITE-LOOP lesz, amely soha nem fog leállni.

Példa 1: Ebben a példában az 1-től 5-ig terjedő számot fogjuk kiírni az alapvető ciklus utasítással. Ehhez a következő kódot hajtjuk végre.

Alap hurok utasítás

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

Kód magyarázata:

  • 2. kódsor: Az 'a' változó 'NUMBER' adattípusként való deklarálása és inicializálása '1' értékkel.
  • 4. kódsor: A „Program indulva” utasítás kinyomtatása.
  • 5. kódsor: A „LOOP” kulcsszó a ciklus kezdetét jelöli.
  • 6. kódsor: Kiírja az „a” értékét.
  • 7. kódsor: +1-gyel növeli az „a” értékét.
  • 8. kódsor: Ellenőrzi, hogy az „a” értéke nagyobb-e 5-nél.
  • 9. kódsor: Az 'END LOOP' kulcsszó a végrehajtási blokk végét jelöli.
  • A 6. sortól a 8. sorig terjedő kód addig fut, amíg az 'a' el nem éri a 6 értéket, mivel a feltétel IGAZ értéket ad vissza, és a vezérlő KILÉPIK a ciklusból.
  • 10. kódsor: „A program befejeződött” nyilatkozat kinyomtatása

A hurkok címkézése

PL/SQL-ben a ciklusok címkézhetők. A címkét a „<<” és „>>” közé kell tenni. A hurkok címkézése, különösen a beágyazott hurokkódokban, jobb olvashatóságot biztosít. A címkét az EXIT paranccsal lehet megadni az adott ciklusból való kilépéshez. A címke használatával a vezérlő közvetlenül kiléphet a beágyazott hurkok külső hurkából a hurkon belüli bárhonnan, az exit parancs, majd a külső hurokcímke megadásával.

A hurkok címkézése

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

Szintaxis magyarázata:

  • A fenti szintaxisban az out ciklusban van még egy ciklus.
  • A '< >' és '< >' ezek a hurkok címkéi.

Példa 1: Ebben a példában az 1-től kezdődő számot fogjuk kiírni Basic ciklus utasítással. Minden szám annyiszor kerül kinyomtatásra, ahányszor az értéke. A sorozat felső határa a program deklarációs résznél van rögzítve. Tanuljuk meg, hogyan használhatjuk a címke koncepcióját ennek eléréséhez. Ehhez a következő kódot hajtjuk végre

A hurkok címkézéseA hurkok címkézése

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

Kód magyarázata:

  • Kódsor 2-3: Az 'a' és 'b' változó 'NUMBER' adattípusként való deklarálása.
  • 4. kódsor: Az 'upper_limit' változó deklarálása 'NUMBER' adattípusként '4' értékkel
  • 6. kódsor: A „Program indulva” utasítás kinyomtatása.
  • 7. kódsor: A külső hurok „outer_loop” címkével lett ellátva
  • 9. kódsor: Az „a” értéke 1-gyel nő.
  • 11. kódsor: A belső hurok „inner_loop” címkével lett ellátva.
  • 13. kódsor: EXIT feltétel, amely ellenőrzi, hogy az 'a' érték magasabb-e, mint az 'upper_limit' érték. Ha nem, akkor tovább megy, különben közvetlenül kilép a külső hurokból.
  • 14. kódsor: 'b' értékének kinyomtatása.
  • 15. kódsor: +1-gyel növeli a „b” értékét.
  • 16. kódsor: EXIT feltétel, amely ellenőrzi, hogy a 'b' értéke nagyobb-e, mint az 'a'. Ha igen, akkor kilép a vezérlésből a belső hurokból.
  • 14. kódsor: „A program befejeződött” nyilatkozat kinyomtatása

Összegzésként

Hurok Alaphurok
KILÉPÉSI kritériumok Lépjen ki, ha az 'EXIT' kulcsszóval találkozik a végrehajtási részben
Használat Jól használható, ha a kilépés nem egy adott körülményen alapul.