Oracle PL/SQL-silmukka esimerkin kanssa

Mitä Loopit ovat?

Silmukat sallivat ohjelman tietyn osan koodin suorittamisen halutun määrän kertoja.

Tässä opetusohjelmassa aiomme nähdä silmukkakonseptin PL/SQL:ssä ja ohjauksen kulkua silmukoissa.

Johdatus Loops-konseptiin

Loops-konsepti tarjoaa seuraavan edun koodauksessa.

  • Koodin uudelleenkäyttö
  • Pienempi koodin koko
  • Helppo ohjausvirta
  • Vähentynyt monimutkaisuus

Alla oleva kaavio esittää silmukkakonseptin kuvallisella tavalla

Oracle PL/SQL-silmukka

Yllä olevassa kaaviossa silmukan ehto tarkistetaan, ja niin kauan kuin silmukan ehto täyttyy, suorituslohko suoritetaan.

Jokaisessa iteraatiossa silmukkalaskurin muuttujan, joka todella päättää silmukan ehdon, tulisi muuttua, jotta ohjaus poistuu silmukasta. Joissakin tapauksissa tämä silmukkalaskurimuuttuja on lisäys/vähennysoperaattori ennalta määritetylle määrälle, ja joissakin tapauksissa se on hakuehto, joka jatkaa lohkon suorittamista, kunnes se täyttää sen.

Silmukkaohjauslausekkeet

Ennen silmukkakäsitteen oppimista on pakollista oppia silmukan ohjauskäskyt. Silmukan ohjauslauseet ovat niitä, jotka itse asiassa ohjaavat suorituksen kulkua silmukan sisällä. Alla on yksityiskohtainen kuvaus silmukan ohjauslauseista.

JATKA

Tämä avainsana lähettää PL/SQL-moottorille käskyn, että aina kun PL/SQL-moottori kohtaa tämän avainsanan silmukan sisällä, se ohittaa jäljellä olevan koodin koodin suorituslohkossa ja seuraava iteraatio alkaa välittömästi. Tätä käytetään pääasiassa, jos silmukan sisällä oleva koodi halutaan ohittaa tiettyjen iteraatioarvojen kohdalla.

POISTU / POISTU KUN

Tämä avainsana lähettää PL/SQL-moottorille käskyn, että aina kun PL/SQL-moottori kohtaa tämän avainsanan, se poistuu välittömästi nykyisestä silmukasta. Jos PL/SQL-kone kohtaa EXITin sisäkkäisessä silmukassa, se tulee ulos silmukasta, jossa se on määritelty, eli sisäkkäisissä silmukassa, jolloin EXIT-valinta sisäisessä silmukassa poistuu ohjauksesta vain sisäisestä silmukasta, mutta ei ulkosilmukasta. 'EXIT WHEN' seuraa lauseke, joka antaa Boolen tuloksen. Jos tulos on TOSI, ohjaus POISTU.

GOTO

Tämä käsky siirtää ohjauksen merkittyyn käskyyn ("GOTO ;"). Tällä on seuraavat rajoitukset

  • Ohjauksen siirto voidaan tehdä vain aliohjelmien sisällä.
  • Ohjauksen siirtoa ei voida tehdä poikkeuskäsittelyosasta suoritusosaan

Tämän lausekkeen käyttöä ei suositella, ellei muita vaihtoehtoja ole, koska koodiohjauksen jäljitettävyys tulee olemaan erittäin vaikeaa ohjelmassa johtuen ohjauksen siirtymisestä osasta toiseen.

Silmukan tyypit PL/SQL:ssä

PL / SQL tarjoaa seuraavat kolme tyyppiä silmukoita

Silmukan peruslauseke

Tämä silmukkakäsky on PL/SQL:n yksinkertaisin silmukkarakenne. Suorituslohko alkaa avainsanalla 'LOOP' ja päättyy avainsanaan 'END LOOP'.

Poistumisehto tulee antaa tämän suorituslohkon sisällä, jotta ohjaus poistuu silmukasta.

Se tarvitsee EXIT-avainsanan, joka on annettava erikseen suoritusosassa, jotta se poistuu silmukasta.

Silmukan peruslauseke

 LOOP
<execution block starts>
<EXIT condition based on developer criteria> 
<execution_block_ends>
END LOOP;

Syntaksiselitys:

  • Yllä olevassa syntaksissa avainsana "LOOP" merkitsee silmukan alkua ja "END LOOP" merkitsee silmukan loppua.
  • Suorituslohko sisältää kaiken koodin, joka on suoritettava, mukaan lukien EXIT-ehto.
  • Suoritusosa voi sisältää minkä tahansa suorituskäskyn.

Huomautus: Perussilmukan lauseke ilman EXIT-avainsanaa on INFINITE-LOOP, joka ei lopu koskaan.

Esimerkki 1: Tässä esimerkissä aiomme tulostaa numeron 1:stä 5:een käyttämällä perussilmukkakäskyä. Tätä varten suoritamme seuraavan koodin.

Silmukan peruslauseke

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:
/

Koodin selitys:

  • Koodirivi 2: Ilmoitetaan muuttuja 'a' 'NUMBER'-tietotyypiksi ja alustetaan arvolla '1'.
  • Koodirivi 4: Lausunnon "Ohjelma aloitettu" tulostaminen.
  • Koodirivi 5: Avainsana "LOOP" merkitsee silmukan alkua.
  • Koodirivi 6: Tulostaa a:n arvon.
  • Koodirivi 7: Lisää a:n arvoa +1:llä.
  • Koodirivi 8: Tarkistaa, onko 'a':n arvo suurempi kuin 5.
  • Koodirivi 9: Avainsana 'END LOOP' merkitsee suorituslohkon lopun.
  • Koodi riviltä 6 riville 8 jatkaa suoritusta, kunnes 'a' saavuttaa arvon 6, koska ehto palauttaa arvon TRUE ja ohjaus POISTU silmukasta.
  • Koodirivi 10: Tulosta lausunto "Ohjelma suoritettu"

Silmukoiden merkitseminen

PL/SQL:ssä silmukat voidaan nimetä. Etiketti tulee olla "<<" ja ">>" välissä. Silmukoiden merkitseminen erityisesti sisäkkäisissä silmukoissa lisää luettavuutta. Nimike voidaan antaa EXIT-komennolla poistuaksesi kyseisestä silmukasta. Labelin avulla ohjaus voidaan saada suoraan poistumaan sisäkkäisten silmukoiden ulkosilmukasta mistä tahansa silmukoiden sisällä antamalla exit-komento ja sitten ulkoinen silmukkatunniste.

Silmukoiden merkitseminen

<<OUTER_LOOP>>
LOOP 
	<execution_block_starts>
	.
	<<INNER_LOOP>>
	LOOP --inner
		<execution_part>
	END LOOP;
	.
	<executi_block_ends>
END LOOP;

Syntaksiselitys:

  • Yllä olevassa syntaksissa ulos-silmukassa on vielä yksi silmukka.
  • '< >' ja '< >' ovat näiden silmukoiden nimikkeet.

Esimerkki 1: Tässä esimerkissä aiomme tulostaa numeron alkaen 1 käyttämällä Basic loop -lausetta. Jokainen numero tulostetaan niin monta kertaa kuin sen arvo on. Sarjan yläraja on kiinteä ohjelman ilmoitusosassa. Opitaan kuinka voimme käyttää etikettikonseptia tämän saavuttamiseksi. Tätä varten suoritamme seuraavan koodin

Silmukoiden merkitseminenSilmukoiden merkitseminen

DECLARE
a NUMBER:=0;
b NUMBER;
upper-limit NUMBER :=4;
BEGIN
dbms_output.put_line(‘Program started.' ); 
«outerloop»‭	‬
LOOP 
a:=a+1;
b:=l;
«inner loop»
LOOP
EXIT outer_loop WHEN a > upper_limit;
dbms_output.put_line(a);
b:=b+l;
EXIT inner_loop WHEN b>a;
END LOOP;
END LOOP;
dbms_output.put_line('Program completed.');
END;
/

Koodin selitys:

  • Koodirivi 2-3: Muuttujien 'a' ja 'b' ilmoittaminen 'NUMBER'-tietotyypeiksi.
  • Koodirivi 4: muuttujan 'upper_limit' ilmoittaminen NUMBER-tietotyypiksi, jonka arvo on '4'
  • Koodirivi 6: Lausunnon "Ohjelma aloitettu" tulostaminen.
  • Koodirivi 7: Ulompi silmukka on merkitty nimellä "outer_loop"
  • Koodirivi 9: 'a':n arvoa kasvatetaan yhdellä.
  • Koodirivi 11: Sisäinen silmukka on merkitty nimellä "inner_loop".
  • Koodirivi 13: EXIT-ehto, joka tarkistaa, onko arvo 'a' suurempi kuin 'upper_limit'-arvo. Jos ei, se menee pidemmälle, muuten se poistuu suoraan ulkosilmukasta.
  • Koodirivi 14: 'b':n arvon tulostaminen.
  • Koodirivi 15: Lisää b:n arvoa +1:llä.
  • Koodirivi 16: EXIT-ehto, joka tarkistaa, onko 'b':n arvo suurempi kuin 'a'. Jos näin on, se poistuu ohjauksesta sisäisestä silmukasta.
  • Koodirivi 14: Tulosta lausunto "Ohjelma suoritettu"

Yhteenveto

Silmukka Perussilmukka
POISTUkriteerit Poistu, kun kohtaa avainsanan "EXIT" suoritusosassa
Käyttö Hyvä käyttää, kun poistuminen ei perustu mihinkään erityiseen ehtoon.