Oracle PL/SQL-silmukka esimerkin kanssa
⚡ Älykäs yhteenveto
PL/SQL-silmukat suorittavat koodin osan toistuvasti halutun määrän kertoja. PL/SQL tarjoaa perus-, FOR- ja WHILE-silmukoita, joita ohjataan CONTINUE-, EXIT-, EXIT WHEN- ja GOTO-komennoilla, ja silmukoita voidaan nimetä sisäkkäisten rakenteiden selkeää hallintaa varten.

Mitä Loopit ovat?
Silmukat mahdollistavat tietyn osan koodista suorittamisen ohjelmassa halutun määrän kertoja. Tässä opetusohjelmassa tarkastelemme silmukkakonseptia PL/SQL:ssä ja ohjauksen kulkua silmukoissa.
Johdatus silmukoiden konseptiin
Silmukkakonsepti tarjoaa seuraavat edut koodauksessa:
- Koodin uudelleenkäytettävyys.
- Pienennetty koodin koko.
- Helppo ohjauksen kulku.
- Vähemmän monimutkaisuutta.
Alla oleva kaavio näyttää vessanping konsepti.
Yllä olevassa kaaviossa silmukan ehto tarkistetaan, ja niin kauan kuin se täyttyy, suorituslohko suoritetaan.
Jokaisella iteraatiolla silmukan laskurimuuttuja, joka määrittää silmukan ehdon, muuttuu, jotta ohjaus poistuu silmukasta. Joissakin tapauksissa tämä laskuri on ennalta määritetyn laskurin lisäys tai vähennys, ja toisissa se on hakuehto, joka suorittaa lohkoa, kunnes se täyttyy.
Silmukkaohjauslausekkeet
Ennen silmukoiden käsitteen oppimista on tärkeää oppia silmukan ohjauslausekkeet. Nämä lauseet ohjaavat suorituksen kulkua silmukan sisällä.
JATKA
Tämä avainsana ohjeistaa PL/SQL-moottoria, että aina kun se kohtaa CONTINUE-käskyn silmukan sisällä, se ohittaa jäljellä olevan koodin suorituslohkossa ja aloittaa seuraavan iteraation välittömästi. Tätä käytetään pääasiassa silloin, kun silmukan sisällä oleva koodi tulisi ohittaa tietyillä iteraatioarvoilla.
POISTU / POISTU KUN
Tämä avainsana käskee PL/SQL-moottoria poistumaan välittömästi nykyisestä silmukasta. Sisäkkäisessä silmukassa sisemmän silmukan EXIT-komento poistuu vain sisemmästä silmukasta, ei ulommasta silmukasta. 'EXIT WHEN' -komentoa seuraa lauseke, joka antaa totuusarvon mukaisen tuloksen; jos tulos on TRUE, ohjaus poistuu.
GOTO
Tämä lauseke siirtää ohjauksen nimetylle lausekkeelle ("GOTO ;"). Sillä on seuraavat rajoitukset:
- Ohjauksen siirto voidaan tehdä vain aliohjelmien sisällä.
- Ohjauksen siirtoa ei voida tehdä poikkeusten käsittelyosasta suoritusosaan.
Tämän lausekkeen käyttöä ei suositella, ellei vaihtoehtoa ole, koska koodin ohjausobjekti tracHallinta vaikeutuu huomattavasti, kun se siirtyy osasta toiseen.
Silmukan tyypit PL/SQL:ssä
PL / SQL tarjoaa seuraavat kolme silmukkatyyppiä:
- Perussilmukkalause
- Silmukan lausekkeelle
- Vaikka silmukkalause
Alla oleva taulukko vertailee näitä kolmea ennen kuin perussilmukka käsitellään yksityiskohtaisesti.
| Silmukka | Poistumiskriteerit | Parhaimmillaan käyttää, kun |
|---|---|---|
| Perussilmukka | Eksplisiittinen ULOSKÄYNTI korttelissa | Poistuminen ei perustu kiinteään määrään tai ehtoon |
| FOR silmukkaa | Laskuri saavuttaa mittausalueensa rajan | Iteraatioiden määrä tiedetään etukäteen |
| WHILE-silmukka | Ehto muuttuu vääräksi | Silmukan tulisi toimia niin kauan kuin ehto on voimassa |
Silmukan peruslauseke
Tämä on PL/SQL:n yksinkertaisin silmukkarakenne. Suorituslohko alkaa avainsanalla 'LOOP' ja päättyy avainsanaan 'END LOOP'. Poistumisehto tulee antaa suorituslohkon sisällä, jotta ohjaus poistuu silmukasta, ja EXIT-avainsana on annettava eksplisiittisesti.
LOOP <execution block starts> <EXIT condition based on developer criteria> <execution_block_ends> END LOOP;
Syntaksiselitys:
- Avainsana 'LOOP' merkitsee silmukan alkua ja 'END LOOP' sen loppua.
- Suorituslohko sisältää kaiken suoritettavan koodin, mukaan lukien EXIT-ehdon.
- Suoritusosa voi sisältää minkä tahansa suoritettavan lausekkeen.
Huomautus: Perussilmukkalauseke ilman EXIT-avainsanaa on ikuinen silmukka, joka ei koskaan pysähdy.
Esimerkki 1: Tässä esimerkissä tulostamme numerot 1-5 käyttämällä yksinkertaista silmukkalausetta.
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 Selitys:
- Code rivi 2: Muuttujan 'a' määrittäminen muotoon 'NUMBER' ja sen alustaminen arvolla '1'.
- Code rivi 4: Tulostaa lausekkeen ”Ohjelma käynnistynyt”.
- Code rivi 5: Avainsana 'LOOP' merkitsee silmukan alkua.
- Code rivi 6: Tulostaa a:n arvon.
- Code rivi 7: Kasvattaa 'a':n arvoa yhdellä.
- Code rivi 8: Tarkistaa, onko 'a':n arvo suurempi kuin 5.
- Code rivi 9: Avainsana 'END LOOP' merkitsee suorituslohkon loppua.
- Rivit 6–8 jatkuvat, kunnes 'a' saavuttaa luvun 6, jolloin ehto palauttaa arvon TRUE ja ohjaus poistuu silmukasta.
- Code rivi 10: Tulostaa ilmoituksen ”Ohjelma valmis”.
Silmukoiden merkitseminen
PL/SQL:ssä silmukoille voidaan antaa nimikkeet. Nimikkeen tulisi olla merkkien "<<" ja ">>" välissä. Silmukoiden nimeäminen, erityisesti sisäkkäisissä silmukoissa, parantaa luettavuutta. Nimikkeen voi antaa EXIT-komennossa kyseisen silmukan poistumiseksi, jolloin ohjaus voi poistua sisäkkäisen rakenteen ulommasta silmukasta suoraan antamalla EXIT-komennon ja sen jälkeen ulomman silmukan nimikkeen.
<<OUTER_LOOP>> LOOP <execution_block_starts> . <<INNER_LOOP>> LOOP --inner <execution_part> END LOOP; . <execution_block_ends> END LOOP;
Syntaksiselitys:
- Ulommassa silmukassa on yksi silmukka lisää sisällään.
- '< >' ja '< >' ovat näiden silmukoiden tunnisteet.
Esimerkki 1: Tässä esimerkissä tulostamme numeroita alkaen 1:stä käyttämällä yksinkertaista silmukkalausetta. Jokainen luku tulostetaan niin monta kertaa kuin sen arvo on. Sarjan yläraja on kiinteä deklarointiosassa. Käytämme tätä varten label-konseptia.
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 Selitys:
- Code rivi 2–3: Muuttujien 'a' ja 'b' määrittäminen 'NUMBER'-tietotyypeiksi.
- Code rivi 4: Muuttujan 'upper_limit' määrittäminen arvoksi 'NUMBER' arvolla '4'.
- Code rivi 6: Tulostaa lausekkeen ”Ohjelma käynnistynyt”.
- Code rivi 7: Ulompi silmukka on merkitty nimellä ”outer_loop”.
- Code rivi 9: 'a':n arvoa kasvatetaan yhdellä.
- Code rivi 11: Sisäinen silmukka on merkitty nimellä ”sisäinen_silmukka”.
- Code rivi 13: POISTUMISehto, joka tarkistaa, onko 'a' suurempi kuin 'upper_limit'-arvo. Jos ei, se jatkaa pidemmälle; muuten se poistuu suoraan ulommasta silmukasta.
- Code rivi 14: 'b':n arvon tulostaminen.
- Code rivi 15: Kasvattaa 'b':n arvoa yhdellä.
- Code rivi 16: POISTUMIS-ehto, joka tarkistaa, onko 'b' suurempi kuin 'a'. Jos on, se poistuu sisemmästä silmukasta.
- Code rivi 19: Tulostaa ilmoituksen ”Ohjelma valmis”.






