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
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
- Alapvető hurokutasítás
- A hurokutasításhoz
- While loop utasítás
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.
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.
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.
<<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
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. |