Oracle PL/SQL LOOP med eksempel

Hva er Loops?

Loops lar en viss del av koden i et program kjรธres i รธnsket antall ganger.

I denne opplรฆringen skal vi se lรธkkekonseptet i PL/SQL og flyt av kontroll i lรธkker.

Introduksjon til Loops Concept

Loops-konseptet gir fรธlgende fordel ved koding.

  • Gjenbruk av kode
  • Redusert kodestรธrrelse
  • Enkel flyt av kontroll
  • Redusert kompleksitet

Diagrammet nedenfor viser looping-konseptet pรฅ en billedlig mรฅte

Oracle PL/SQL LOOP

I diagrammet ovenfor vil lรธkkebetingelsen bli sjekket, og sรฅ lenge lรธkkebetingelsen er tilfredsstilt, vil utfรธrelsesblokken bli utfรธrt.

I hver iterasjon bรธr slรธyfetellervariabelen som faktisk bestemmer lรธkkebetingelsen modifiseres for รฅ fรฅ kontrollen til รฅ gรฅ ut av lรธkken. I noen tilfeller er denne lรธkketellervariabelen inkrement/dekrementoperator for et forhรฅndsdefinert antall, og i noen tilfeller er det en sรธkebetingelse som fortsetter รฅ utfรธre blokken til den tilfredsstiller den.

Uttalelser om slรธyfekontroll

Fรธr du lรฆrer loops-konseptet, er det obligatorisk รฅ lรฆre om loop control-setninger. Loop control statements er de som faktisk kontrollerer flyten av utfรธrelse inne i loopen. Nedenfor er den detaljerte beskrivelsen av slรธyfekontrollsetningene.

FORTSETT

Dette nรธkkelordet sender en instruksjon til PL/SQL-motoren om at nรฅr PL/SQL-motoren mรธter dette nรธkkelordet inne i loopen, vil den hoppe over den gjenvรฆrende koden i utfรธrelsesblokken til koden, og neste iterasjon vil starte umiddelbart. Dette vil hovedsakelig brukes hvis koden inne i loopen รธnsker รฅ bli hoppet over for visse iterasjonsverdier.

EXIT / EXIT Nร…R

Dette nรธkkelordet sender en instruksjon til PL/SQL-motoren om at nรฅr PL/SQL-motoren stรธter pรฅ dette nรธkkelordet, vil den umiddelbart gรฅ ut av gjeldende lรธkke. Hvis PL/SQL-motoren stรธter pรฅ EXIT i en nestet slรธyfe, vil den komme ut av lรธkken den har blitt definert i, dvs. i en nested loop, og รฅ gi EXIT i den indre slรธyfen vil bare gรฅ ut av kontrollen fra den indre slรธyfen, men ikke fra den ytre lรธkken. 'EXIT WHEN' etterfรธlges av et uttrykk som gir et boolsk resultat. Hvis resultatet er TRUE, vil kontrollen AVSLUTE.

GOTO

Denne setningen vil overfรธre kontrollen til den merkede setningen ("GOTO ;"). Dette har fรธlgende begrensninger

  • Overfรธring av kontroll kan bare gjรธres innenfor underprogrammene.
  • Overfรธring av kontroll kan ikke gjรธres fra unntakshรฅndteringsdel til utfรธrelsesdel

Bruk av denne setningen anbefales ikke med mindre det ikke finnes andre alternativer, da kodekontrollsporbarheten vil vรฆre svรฆrt vanskelig i programmet pรฅ grunn av overfรธring av kontroll fra en del til en annen del.

Looptyper i PL/SQL

PL / SQL gir fรธlgende tre typer lรธkker

Grunnleggende lรธkkeerklรฆring

Denne loop-setningen er den enkleste loopstrukturen i PL/SQL. Utfรธrelsesblokken starter med nรธkkelordet 'LOOP' og slutter med nรธkkelordet 'END LOOP'.

Utgangsbetingelsen skal gis inne i denne utfรธrelsesblokken slik at kontrollutgangen fra slรธyfen.

Det mรฅ EXIT-nรธkkelordet gis eksplisitt i utfรธrelsesdelen for รฅ gรฅ ut av loopen.

Grunnleggende lรธkkeerklรฆring

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

Syntaks forklaring:

  • I syntaksen ovenfor markerer nรธkkelordet 'LOOP' begynnelsen av lรธkken og 'END LOOP' markerer slutten pรฅ lรธkken.
  • Utfรธrelsesblokken inneholder all koden som mรฅ utfรธres, inkludert EXIT-betingelsen.
  • Utfรธrelsesdelen kan inneholde en hvilken som helst utfรธrelseserklรฆring.

OBS: Grunnleggende loop-setning uten EXIT-nรธkkelord vil vรฆre en INFINITE-LOOP som aldri vil stoppe.

Eksempel 1: I dette eksemplet skal vi skrive ut tall fra 1 til 5 ved รฅ bruke grunnleggende loop-setning. For det vil vi kjรธre fรธlgende kode.

Grunnleggende lรธkkeerklรฆring

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

Kodeforklaring:

  • Kodelinje 2: Erklรฆrer variabelen 'a' som 'NUMBER' datatype og initialiserer den med verdien '1'.
  • Kodelinje 4: Skriver ut setningen "Program started".
  • Kodelinje 5: Nรธkkelordet 'LOOP' markerer begynnelsen av loopen.
  • Kodelinje 6: Skriver ut verdien av 'a'.
  • Kodelinje 7: ร˜ker verdien av 'a' med +1.
  • Kodelinje 8: Sjekker om verdien av 'a' er stรธrre enn 5.
  • Kodelinje 9: Nรธkkelordet 'END LOOP' markerer slutten pรฅ utfรธrelsesblokken.
  • Koden fra linje 6 til linje 8 vil fortsette รฅ kjรธre til 'a' nรฅr verdien 6, da tilstanden vil returnere TRUE, og kontrollen vil EXIT fra lรธkken.
  • Kodelinje 10: Skriver ut erklรฆringen "Program fullfรธrt"

Merking av lรธkker

I PL/SQL kan lรธkkene merkes. Etiketten skal vรฆre omsluttet mellom "<<" og ">>". Merking av lรธkker, spesielt i nestede slรธyfekoder, vil gi mer lesbarhet. Etiketten kan gis i EXIT-kommandoen for รฅ gรฅ ut av den aktuelle slรธyfen. Ved รฅ bruke etikett, kan kontrollen gjรธres for รฅ gรฅ ut direkte fra den ytre lรธkken til de nestede lรธkkene fra hvor som helst innenfor lรธkkene, ved รฅ gi exit-kommandoen etterfulgt av ytre lรธkkeetikett.

Merking av lรธkker

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

Syntaks forklaring:

  • I syntaksen ovenfor har ut-lรธkken en lรธkke til inne i seg.
  • Den '< >' og '< >' er etikettene til disse lรธkkene.

Eksempel 1: I dette eksemplet skal vi skrive ut nummer fra 1 ved รฅ bruke Basic loop statement. Hvert tall vil bli skrevet ut like mange ganger som verdien. Den รธvre grensen for serien er fastsatt ved programerklรฆringsdelen. La oss lรฆre hvordan vi kan bruke merkekonseptet for รฅ oppnรฅ dette. For det vil vi kjรธre fรธlgende kode

Merking av lรธkkerMerking av lรธkker

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

Kodeforklaring:

  • Kodelinje 2-3: Erklรฆrer variabelen 'a' og 'b' som 'NUMBER' datatype.
  • Kodelinje 4: Erklรฆrer variabelen 'upper_limit' som 'NUMBER' datatype med verdien '4'
  • Kodelinje 6: Skriver ut setningen "Program started".
  • Kodelinje 7: Den ytre slรธyfen har blitt merket som "outer_loop"
  • Kodelinje 9: Verdien av 'a' รธkes med 1.
  • Kodelinje 11: Inner loop har blitt merket som "inner_loop".
  • Kodelinje 13: EXIT-betingelse som sjekker om verdien 'a' er hรธyere enn 'upper_limit'-verdien. Hvis ikke, vil den gรฅ lenger, ellers gรฅr den direkte ut av den ytre slรธyfen.
  • Kodelinje 14: Skriver ut verdien av 'b'.
  • Kodelinje 15: ร˜ker verdien av 'b' med +1.
  • Kodelinje 16: EXIT-tilstand som sjekker om verdien av 'b' er hรธyere enn 'a'. I sรฅ fall vil den gรฅ ut av kontrollen fra den indre slรธyfen.
  • Kodelinje 14: Skriver ut erklรฆringen "Program fullfรธrt"

Sammendrag

Loop Grunnleggende slรธyfe
EXIT-kriterier Avslutt nรฅr du mรธter nรธkkelordet 'EXIT' i utfรธrelsesdelen
bruk God รฅ bruke nรฅr utgang ikke er basert pรฅ noen spesiell tilstand.

Oppsummer dette innlegget med: