Oracle PL/SQL tsükkel koos näitega
⚡ Nutikas kokkuvõte
PL/SQL-tsüklid käivitavad koodilõiku korduvalt soovitud arv kordi. PL/SQL pakub põhilisi FOR- ja WHILE-tsükleid, mida juhivad CONTINUE, EXIT, EXIT WHEN ja GOTO käsud, ning tsükleid saab märgistada, et pesastatud struktuure selgelt hallata.

Mis on silmused?
Tsüklid võimaldavad programmi teatud osa soovitud arv kordi käivitada. Selles õpetuses vaatleme tsükli kontseptsiooni PL/SQL-is ja juhtimisvoogu tsüklites.
Sissejuhatus silmuste kontseptsiooni
Tsüklite kontseptsioon pakub kodeerimisel järgmisi eeliseid:
- Koodi korduvkasutatavus.
- Väiksem koodi suurus.
- Lihtne juhtimisvoog.
- Vähendatud keerukus.
Allolev diagramm näitab tualettiping kontseptsioon.
Ülaltoodud diagrammil kontrollitakse tsükli tingimust ja seni, kuni see on täidetud, käivitub täitmisplokk.
Igas iteratsioonis peaks tsükli loenduri muutuja, mis määrab tsükli tingimuse, muutuma, et juhtseade tsüklist väljuks. Mõnel juhul on see loendur etteantud loenduri suurendamine või vähendamine ning teistel juhtudel on see otsingutingimus, mis jätkab ploki täitmist, kuni see on täidetud.
Silmusjuhtimise avaldused
Enne tsüklite kontseptsiooni õppimist on oluline õppida tsükli juhtimise lauseid. Need laused kontrollivad tsükli sees toimuvat täitmist.
EDASI
See märksõna annab PL/SQL-mootorile juhise, et kui see tsükli sees kohtab CONTINUE-d, jätab see ülejäänud koodi täitmisplokis vahele ja alustab kohe järgmist iteratsiooni. Seda kasutatakse peamiselt siis, kui tsükli sees olev kood tuleks teatud iteratsiooniväärtuste korral vahele jätta.
VÄLJU / VÄLJU MILLAL
See märksõna annab PL/SQL-mootorile käsu koheselt praegusest tsüklist väljuda. Pesastatud tsüklis väljub sisemise tsükli EXIT ainult sisemisest tsüklist, mitte välimisest tsüklist. 'EXIT WHEN' järgneb avaldis, mis annab Boole'i tulemuse; kui tulemus on TRUE, siis juhtimine väljub.
GOTO
See lause annab juhtimise üle märgistatud lausele („GOTO ;“). Sellel on järgmised piirangud:
- Juhtimise üleandmist saab teha ainult alamprogrammide sees.
- Juhtimise üleandmist erandite käsitlemise osast täitmisosale ei saa teha.
Selle lause kasutamine pole soovitatav, välja arvatud juhul, kui alternatiivi pole, kuna koodikontroll tracKontroll muutub väga keeruliseks, kui see kandub ühelt osapoolelt teisele.
Silmuse tüübid PL/SQL-is
PL / SQL pakub järgmist kolme tüüpi silmuseid:
- Põhiline silmuslause
- Silmuslause jaoks
- Kuigi silmuslause
Allolev tabel võrdleb neid kolme enne põhitsükli üksikasjalikku käsitlemist.
| Silmus | Väljumiskriteeriumid | Parim kasutada siis, kui |
|---|---|---|
| Põhiline tsükkel | Selgesõnaline VÄLJASÕIT kvartalis | Väljumine ei põhine fikseeritud arvul ega tingimusel. |
| FOR silmus | Loendur jõuab oma vahemiku lõppu | Iteratsioonide arv on ette teada |
| WHILE-tsükkel | Tingimus muutub vääraks | Tsükkel peaks töötama seni, kuni tingimus kehtib |
Silmuse põhilause
See on PL/SQL-i lihtsaim tsükli struktuur. Täitmisplokk algab märksõnaga 'LOOP' ja lõpeb märksõnaga 'END LOOP'. Väljumistingimus tuleks anda täitmisploki sees, et juhtimine tsüklist väljuks, ja märksõna EXIT tuleb anda selgesõnaliselt.
LOOP <execution block starts> <EXIT condition based on developer criteria> <execution_block_ends> END LOOP;
Süntaksi selgitus:
- Märksõna „LOOP” tähistab tsükli algust ja „END LOOP” tähistab lõppu.
- Täitmisplokk sisaldab kogu käivitatavat koodi, sealhulgas EXIT-tingimust.
- Täitmisosa võib sisaldada mis tahes käivitatavat lauset.
Märge: Lihtne tsüklilause ilma EXIT märksõnata on lõpmatu tsükkel, mis ei peatu kunagi.
Näide 1: Selles näites prindime numbrid 1-st 5-ni, kasutades lihtsat tsüklilauset.
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; /
Code Selgitus:
- Code rida 2: Muutuja 'a' deklareerimine väärtusena 'NUMBER' ja selle initsialiseerimine väärtusega '1'.
- Code rida 4: Lause „Programm käivitatud” printimine.
- Code rida 5: Märksõna „LOOP” tähistab tsükli algust.
- Code rida 6: Prindib 'a' väärtuse.
- Code rida 7: Suurendab 'a' väärtust 1 võrra.
- Code rida 8: Kontrollib, kas 'a' väärtus on suurem kui 5.
- Code rida 9: Märksõna 'END LOOP' tähistab täitmisploki lõppu.
- Ridade 6 kuni 8 täitmine jätkub seni, kuni 'a' jõuab arvuni 6, mille järel tingimus tagastab väärtuse TRUE ja juhtimine väljub tsüklist.
- Code rida 10: Avalduse „Programm lõpetatud” printimine.
Silmuste märgistamine
PL/SQL-is saab tsükleid märgistada. Märgistus peaks olema "<<" ja ">>" vahel. Tsüklite märgistamine, eriti pesastatud tsüklite puhul, annab parema loetavuse. Märgise saab anda EXIT-käsuga, et väljuda sellest konkreetsest tsüklist, nii et juhtimine saab pesastatud struktuuri välimisest tsüklist otse väljuda, andes EXIT-käsu ja seejärel välise tsükli sildi.
<<OUTER_LOOP>> LOOP <execution_block_starts> . <<INNER_LOOP>> LOOP --inner <execution_part> END LOOP; . <execution_block_ends> END LOOP;
Süntaksi selgitus:
- Välimises silmuses on sees veel üks silmus.
- '< >' ja '< >' on nende tsüklite sildid.
Näide 1: Selles näites trükime numbreid alates 1-st, kasutades lihtsat tsüklilauset. Iga arv trükitakse nii mitu korda kui on selle väärtus. Jada ülempiir on deklaratsiooniosas fikseeritud. Selle saavutamiseks kasutame siltide kontseptsiooni.
DECLARE a NUMBER:= 0; b NUMBER; upper_limit NUMBER := 4; BEGIN dbms_output.put_line('Program started.'); <<outer_loop>> LOOP a:= a+1; b:= 1; <<inner_loop>> LOOP EXIT outer_loop WHEN a > upper_limit; dbms_output.put_line(a); b:= b+1; EXIT inner_loop WHEN b>a; END LOOP; END LOOP; dbms_output.put_line('Program completed.'); END; /
Code Selgitus:
- Code rida 2-3: Muutujate 'a' ja 'b' deklareerimine andmetüübina 'NUMBER'.
- Code rida 4: Muutuja 'upper_limit' deklareerimine väärtusega 'NUMBER' väärtusega '4'.
- Code rida 6: Lause „Programm käivitatud” printimine.
- Code rida 7: Välimine tsükkel on tähistatud kui „väline_tsükkel”.
- Code rida 9: 'a' väärtust suurendatakse 1 võrra.
- Code rida 11: Sisemine tsükkel on tähistatud kui „inner_loop“.
- Code rida 13: EXIT-tingimus, mis kontrollib, kas 'a' on suurem kui 'upper_limit' väärtus. Kui ei, siis läheb edasi; vastasel juhul väljub otse välimisest tsüklist.
- Code rida 14: 'b' väärtuse trükkimine.
- Code rida 15: Suurendab 'b' väärtust 1 võrra.
- Code rida 16: EXIT-tingimus, mis kontrollib, kas 'b' on suurem kui 'a'. Kui jah, siis väljub see sisemisest tsüklist.
- Code rida 19: Avalduse „Programm lõpetatud” printimine.






