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.

  • 🔢 Paras: FOR-silmukka sopii tunnettuun iteraatiomäärään avoimen ehdon sijaan.
  • 📏 Range: Ala- ja yläraja määrittävät, kuinka monta kertaa silmukka suoritetaan.
  • ⚙️ Implisiittinen vastalause: Silmukkamuuttuja määritetään automaattisesti ja se kasvaa itsestään.
  • 🎯 Soveltamisala: Silmukkamuuttuja on olemassa vain silmukan sisällä.
  • 🔄 KÄÄNTÖPUOLI: REVERSE-merkin lisääminen ennen alarajaa käynnistää silmukan laskemisen alaspäin.
  • 🪜 Sisäkkäinen: Silmukat voivat olla sisäkkäisiä, ja sisempi silmukka suoritetaan kokonaan jokaisella ulommalla iteraatiolla.
  • 🚪 Automaattinen poistuminen: Silmukka päättyy automaattisesti, kun muuttuja poistuu arvoalueelta.

Oracle PL/SQL silmukalle

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.

FOR-silmukka tulostaa numerot 1–5

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.

Sisäkkäinen silmukkarakenne

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.

Sisäkkäisen FOR-silmukan esimerkki, osa 1

Sisäkkäisen FOR-silmukan esimerkki, osa 2

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.

UKK

Ei. FOR-silmukka määrittää muuttujansa implisiittisesti, ja se on olemassa vain silmukan sisällä. Samannimisen muuttujan määrittäminen silmukan ulkopuolella ei vaikuta silmukan käyttämään muuttujaan.

REVERSE-käskyllä ​​silmukka iteroituu ylemmästä rajasta alempaan rajaan. Rajat kirjoitetaan edelleen alhaalta ylös; vain arvojen tarkastelujärjestys käännetään päinvastaiseksi.

Käytä FOR-silmukkaa, kun iteraatioiden määrä tiedetään etukäteen, kuten kiinteällä alueella. Käytä WHILE-silmukkaa, kun silmukan tulisi jatkua ehdon ollessa voimassa ja laskentamäärä ei ole kiinteä.

Kyllä, kun perussilmukka laskee kahden kiinteän arvon välillä. Tekoäly voi korvata manuaalisen laskurin ja EXIT-käskyn FOR-alueella, mikä lyhentää koodia. Varmista, että rajat vastaavat alkuperäistä.

Ei. Silmukkamuuttuja on silmukan sisällä vain luettavissa, joten sen sijoittaminen aiheuttaa käännösvirheen. Voit muuttaa kulkua käyttämällä erillistä muuttujaa tai poistumalla silmukasta EXIT-komennolla.

Tiivistä tämä viesti seuraavasti: