Oracle PL/SQL FOR LOOP esimerkin kanssa
⚡ Älykäs yhteenveto
Oracle PL/SQL FOR -silmukka suorittaa koodilohkon tunnetun määrän kertoja ala- ja ylärajan välillä. Silmukkamuuttuja määritetään implisiittisesti ja se kasvaa itsestään, joten manuaalista laskuria ei tarvita, ja REVERSE-avainsana antaa silmukan laskea alaspäin.
Mikä on FOR-silmukka?
”FOR LOOP” -lauseke sopii parhaiten silloin, kun haluat suorittaa koodia tietyn määrän kertoja jonkin muun ehdon perusteella.
Tässä silmukassa määritetään alaraja ja yläraja, ja niin kauan kuin silmukkamuuttuja on näiden arvojen välissä, silmukka suoritetaan.
Silmukkamuuttuja on itseinkrementaalinen, joten eksplisiittistä inkrementtioperaatiota ei tarvita. Silmukkamuuttujaa ei tarvitse deklaroida, koska se deklaroidaan implisiittisesti.
FOR <loop_variable> in <lower_limit> .. <higher_limit> LOOP <execution block starts> . . . <execution_block_ends> END LOOP;
Syntaksiselitys:
- Avainsana 'FOR' merkitsee silmukan alkua ja 'END LOOP' sen loppua.
- Silmukkamuuttuja arvioidaan joka kerta ennen suoritusosan suorittamista.
- Suorituslohko sisältää kaiken suoritettavan koodin ja voi sisältää minkä tahansa suoritettavan lausekkeen.
- silmukkamuuttuja (loop_variable) deklaroidaan implisiittisesti silmukan suorituksen aikana, ja sen laajuus on vain silmukan sisällä.
- Kun silmukkamuuttuja siirtyy alueen ulkopuolelle, ohjaus poistuu silmukasta.
- Silmukan saa toimimaan käänteisessä järjestyksessä lisäämällä avainsanan 'REVERSE' ennen lower_limit-argumenttia.
Esimerkki 1: Tässä esimerkissä tulostamme numerot 1-5 käyttämällä FOR-silmukkalauseketta.
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 Selitys:
- Code rivi 2: Tulostaa lausekkeen ”Ohjelma käynnistynyt”.
- Code rivi 3: Avainsana 'FOR' merkitsee silmukan alkua ja silmukkamuuttuja 'a' on määritelty. Se voi nyt saada arvoja väliltä 1–5.
- Code rivi 5: Tulostaa a:n arvon.
- Code rivi 6: Avainsana 'END LOOP' merkitsee suorituslohkon loppua.
- Rivi 5 jatkaa suoritusta, kunnes 'a' saavuttaa arvon 6, jolloin ehto epäonnistuu ja ohjaus poistuu silmukasta.
- Code rivi 7: Tulostaa ilmoituksen ”Ohjelma valmis”.
Sisäkkäiset silmukat
Silmukkalausekkeita voidaan myös sisäkkäin asettaa. Ulompi ja sisempi silmukka voivat olla eri tyyppisiä. Sisäkkäisessä silmukassa ulomman silmukan jokaisella iteraatiolla sisempi silmukka suoritetaan kokonaan.
LOOP --outer <execution block starts> LOOP --inner <execution_part> END LOOP; <execution_block_ends> END LOOP;
Syntaksiselitys:
- Ulommassa silmukassa on yksi silmukka lisää sisällään.
- Silmukat voivat olla minkä tahansa tyyppisiä, ja niiden suoritustoiminnallisuus on sama.
Esimerkki 1: Tässä esimerkissä tulostamme luvut 1–3 käyttämällä FOR-silmukkalauseketta. Jokainen luku tulostetaan niin monta kertaa kuin sen arvo on.
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 Selitys:
- Code rivi 2: Muuttujan 'b' määrittäminen 'NUMBER'-tietotyypiksi.
- Code rivi 4: Tulostaa lausekkeen ”Ohjelma käynnistynyt”.
- Code rivi 5: Avainsana 'FOR' merkitsee silmukan alkua ja silmukkamuuttuja 'a' on määritelty. Se voi nyt saada arvoja väliltä 1–3.
- Code rivi 7: Nollataan 'b':n arvoksi '1' joka kerta.
- Code rivi 8: Sisäinen samalla silmukka tarkistaa ehdon a>=b.
- Code rivi 10: Tulostaa a:n arvon niin kauan kuin yllä oleva ehto täyttyy.
- Code rivi 14: Tulostaa ilmoituksen ”Ohjelma valmis”.
FOR-silmukka ja REVERSE FOR-silmukka
Oletusarvoisesti FOR-silmukka laskee ylöspäin alarajasta ylärajaan. REVERSE-avainsanan lisääminen saa sen laskemaan alaspäin, kun taas keeping rajat samassa järjestyksessä. Molemmat lomakkeet on esitetty yhdessä alla, joten ero on selvä.
| muoto | Ylätunniste | Arvojen järjestys |
|---|---|---|
| nouseva | IN 1 .. 5:LLE | 1, 2, 3, 4, 5 |
| aleneva | KÄÄNTEISSUUNTAAN 1 .. 5 | 5, 4, 3, 2, 1 |
Huomaa, että vaikka käytettäisiin REVERSE-asetusta, alaraja kirjoitetaan edelleen ennen ylärajaa; vain iteraation suunta muuttuu. Silmukoissa, joiden lukumäärää ei tiedetä etukäteen, perussilmukka on parempi valinta.





