Oracle PL/SQL FOR LOOP näitega
⚡ Nutikas kokkuvõte
Oracle PL/SQL FOR-tsükkel käivitab koodiploki teadaoleva arvu kordi alumise ja ülemise piiri vahel. Tsüklimuutuja deklareeritakse kaudselt ja see suureneb iseenesest, seega pole käsitsi loendurit vaja, ning REVERSE-võtmesõna laseb tsüklil allapoole lugeda.
Mis on FOR-tsükkel?
„FOR LOOP” lause sobib kõige paremini siis, kui soovite koodi käivitada teadaoleva arvu kordi, mitte mingil muul tingimusel.
Selles tsüklis määratakse alumine ja ülemine piir ning seni, kuni tsüklimuutuja jääb nende vahemikku, tsüklit käivitatakse.
Tsüklimuutuja on iseinkrementeeruv, seega pole otsest inkrementeerimisoperatsiooni vaja. Tsüklimuutujat ei ole vaja deklareerida, kuna see deklareeritakse implitsiitselt.
FOR <loop_variable> in <lower_limit> .. <higher_limit> LOOP <execution block starts> . . . <execution_block_ends> END LOOP;
Süntaksi selgitus:
- Märksõna „FOR” tähistab tsükli algust ja „END LOOP” tähistab lõppu.
- Tsüklimuutujat hinnatakse iga kord enne teostusosa käivitamist.
- Täitmisplokk sisaldab kogu käivitatavat koodi ja võib sisaldada mis tahes käivitatavat lauset.
- Muutuja (loop_variable) deklareeritakse tsükli täitmise ajal kaudselt ja selle ulatus on ainult tsükli sees.
- Kui tsükli muutuja liigub vahemikust välja, väljub juhtimine tsüklist.
- Tsükli saab panna tööle vastupidises järjekorras, lisades enne alumist_limiiti märksõna 'REVERSE'.
Näide 1: Selles näites prindime FOR-tsükli abil numbreid 1-st 5-ni.
BEGIN dbms_output.put_line('Program started.'); FOR a IN 1 .. 5 LOOP dbms_output.put_line(a); END LOOP; dbms_output.put_line('Program completed.'); END; /
Code Selgitus:
- Code rida 2: Lause „Programm käivitatud” printimine.
- Code rida 3: Märksõna 'FOR' tähistab tsükli algust ja deklareeritakse tsüklimuutuja 'a'. See võtab nüüd väärtused vahemikus 1 kuni 5.
- Code rida 5: Prindib 'a' väärtuse.
- Code rida 6: Märksõna 'END LOOP' tähistab täitmisploki lõppu.
- Rida 5 jätkab täitmist, kuni 'a' saavutab väärtuse 6, mille järel tingimus ebaõnnestub ja juhtimine väljub tsüklist.
- Code rida 7: Avalduse „Programm lõpetatud” printimine.
Pesastatud silmused
Tsüklilauseid saab ka pesastada. Välised ja sisemised tsüklid võivad olla erinevat tüüpi. Pesastatud tsüklis täidab sisemine tsükkel iga välise tsükli iteratsiooni korral täielikult.
LOOP --outer <execution block starts> LOOP --inner <execution_part> END LOOP; <execution_block_ends> END LOOP;
Süntaksi selgitus:
- Välimises silmuses on sees veel üks silmus.
- Tsüklid võivad olla mis tahes tüüpi ja täitmisfunktsionaalsus on sama.
Näide 1: Selles näites prindime FOR-tsükli abil numbreid 1 kuni 3. Iga arv prinditakse nii mitu korda kui selle väärtus.
DECLARE b NUMBER; BEGIN dbms_output.put_line('Program started'); FOR a IN 1..3 LOOP b:= 1; WHILE (a>=b) LOOP dbms_output.put_line(a); b:= b+1; END LOOP; END LOOP; dbms_output.put_line('Program completed'); END; /
Code Selgitus:
- Code rida 2: Muutuja 'b' deklareerimine andmetüübina 'NUMBER'.
- Code rida 4: Lause „Programm käivitatud” printimine.
- Code rida 5: Märksõna 'FOR' tähistab tsükli algust ja deklareeritakse tsüklimuutuja 'a'. See võtab nüüd väärtused vahemikus 1 kuni 3.
- Code rida 7: 'b' väärtuse lähtestamine iga kord väärtusele 1.
- Code rida 8: Sisemine samas silmus kontrollib tingimust a>=b.
- Code rida 10: Prindib „a” väärtuse seni, kuni ülaltoodud tingimus on täidetud.
- Code rida 14: Avalduse „Programm lõpetatud” printimine.
FOR-tsükkel ja REVERSE FOR-tsükkel
Vaikimisi loendab FOR-tsükkel alumisest piirist ülemise piirini ülespoole. Märksõna REVERSE lisamine paneb loendama allapoole, samal ajal kui keeping piirid samas järjekorras. Mõlemad vormid on allpool koos näidatud, seega on erinevus selge.
| vorm | Päise | Väärtuste järjekord |
|---|---|---|
| Kasvav | IN 1 .. 5 jaoks | 1, 2, 3, 4, 5 |
| Kahanev | TAGURPIDI 1 .. 5 jaoks | 5, 4, 3, 2, 1 |
Pane tähele, et isegi REVERSE'i korral kirjutatakse alumine piir ikkagi enne ülemist piiri; muutub ainult iteratsiooni suund. Tsüklite puhul, mille arv pole ette teada, põhitsükkel on parem valik.





