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.