Oracle PL/SQL LOOP med eksempel

Hvad er loops?

Loops tillader en bestemt del af koden i et program at blive eksekveret i det รธnskede antal gange.

I denne tutorial skal vi se loop-konceptet i PL/SQL og flow af kontrol i loops.

Introduktion til Loops Concept

Loops-konceptet giver fรธlgende fordel ved kodning.

  • Genanvendelighed af kode
  • Reduceret kodestรธrrelse
  • Nem flow af kontrol
  • Reduceret kompleksitet

Diagrammet nedenfor viser toilettetping koncept pรฅ en billedlig mรฅde

Oracle PL/SQL LOOP

I ovenstรฅende diagram vil slรธjfebetingelsen blive kontrolleret, og sรฅ lรฆnge slรธjfebetingelsen er opfyldt, vil eksekveringsblokken blive eksekveret.

I hver iteration skal den slรธjfetรฆllervariabel, der faktisk bestemmer slรธjfebetingelsen, รฆndres for at fรฅ kontrolelementet til at forlade slรธjfen. I nogle tilfรฆlde er denne slรธjfetรฆllervariabel inkrement/reduktionsoperator for et foruddefineret antal, og i nogle tilfรฆlde er det en sรธgebetingelse, der bliver ved med at udfรธre blokken, indtil den opfylder den.

Erklรฆringer om loopkontrol

Fรธr du lรฆrer loops-konceptet, er det obligatorisk at lรฆre om loop control-sรฆtninger. Slรธjfekontroludsagn er dem, der faktisk styrer strรธmmen af โ€‹โ€‹eksekvering inde i lรธkken. Nedenfor er den detaljerede beskrivelse af slรธjfekontrolsรฆtningerne.

FORTSร†T

Dette nรธgleord sender en instruktion til PL/SQL-motoren om, at nรฅr PL/SQL-motoren stรธder pรฅ dette nรธgleord inde i lรธkken, vil den springe den resterende kode over i kodens udfรธrelsesblok, og nรฆste iteration vil starte med det samme. Dette vil primรฆrt blive brugt, hvis koden inde i lรธkken รธnsker at blive sprunget over for bestemte iterationsvรฆrdier.

EXIT / EXIT HVORNร…R

Dette nรธgleord sender en instruktion til PL/SQL-motoren om, at hver gang PL/SQL-motoren stรธder pรฅ dette nรธgleord, vil den straks forlade den aktuelle slรธjfe. Hvis PL/SQL-motoren stรธder pรฅ EXIT i en indlejret lรธkke, sรฅ vil den komme ud af den lรธkke, hvori den er blevet defineret, dvs. i en indlejret lรธkke, giver EXIT i den indre lรธkke kun styringen fra den indre lรธkke, men ikke fra den ydre lรธkke. 'EXIT WHEN' efterfรธlges af et udtryk, der giver et boolesk resultat. Hvis resultatet er TRUE, vil kontrollen EXIT.

GOTO

Denne erklรฆring overfรธrer kontrollen til den mรฆrkede sรฆtning ("GOTO ;"). Dette har fรธlgende begrรฆnsninger

  • Overfรธrsel af kontrol kan kun ske inden for underprogrammerne.
  • Overfรธrsel af kontrol kan ikke ske fra undtagelseshรฅndteringsdel til udfรธrelsesdel

Brug af denne sรฆtning anbefales ikke, medmindre der ikke er andre alternativer, da kodekontrollen tracDet vil vรฆre meget vanskeligt at gennemfรธre programmet pรฅ grund af overfรธrslen af โ€‹โ€‹kontrol fra รฉn del til en anden.

Looptyper i PL/SQL

PL / SQL giver fรธlgende tre typer slรธjfer

Grundlรฆggende lรธkkeerklรฆring

Denne loop-sรฆtning er den enkleste loop-struktur i PL/SQL. Udfรธrelsesblokken starter med nรธgleordet 'LOOP' og slutter med nรธgleordet 'END LOOP'.

Udgangsbetingelsen skal angives inde i denne udfรธrelsesblok, sรฅledes at kontrol forlader slรธjfen.

Det krรฆver, at EXIT-nรธgleordet gives eksplicit i udfรธrelsesdelen for at forlade lรธkken.

Grundlรฆggende lรธkkeerklรฆring

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

Syntaks forklaring:

  • I ovenstรฅende syntaks markerer nรธgleordet 'LOOP' begyndelsen af โ€‹โ€‹lรธkken og 'END LOOP' markerer slutningen af โ€‹โ€‹lรธkken.
  • Udfรธrelsesblokken indeholder al den kode, der skal udfรธres, inklusive EXIT-betingelsen.
  • Udfรธrelsesdelen kan indeholde en hvilken som helst udfรธrelseserklรฆring.

Bemรฆrk: Grundlรฆggende loop-sรฆtning uden EXIT-nรธgleord vil vรฆre en INFINITE-LOOP, der aldrig stopper.

Eksempel 1: I dette eksempel skal vi udskrive nummer fra 1 til 5 ved hjรฆlp af grundlรฆggende loop-sรฆtning. Til det vil vi udfรธre fรธlgende kode.

Grundlรฆggende 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:
/

Code Forklaring:

  • Code line 2: Erklรฆrer variablen 'a' som 'NUMBER' datatype og initialiserer den med vรฆrdien '1'.
  • Code line 4: Udskrivning af erklรฆringen "Program started".
  • Code linje 5: Nรธgleord 'LOOP' markerer begyndelsen af โ€‹โ€‹lรธkken.
  • Code linje 6: Udskriver vรฆrdien af โ€‹โ€‹'a'.
  • Code linje 7: ร˜ger vรฆrdien af โ€‹โ€‹'a' med +1.
  • Code linje 8: Kontrollerer, om vรฆrdien af โ€‹โ€‹'a' er stรธrre end 5.
  • Code linje 9: Nรธgleordet 'END LOOP' markerer slutningen af โ€‹โ€‹udfรธrelsesblokken.
  • Koden fra linje 6 til linje 8 vil fortsรฆtte med at udfรธre, indtil 'a' nรฅr vรฆrdien 6, da betingelsen returnerer TRUE, og styringen vil EXIT fra lรธkken.
  • Code linje 10: Udskrivning af erklรฆringen "Program gennemfรธrt"

Mรฆrkning af lรธkker

I PL/SQL kan lรธkkerne mรฆrkes. Etiketten skal vรฆre omsluttet mellem "<<" og ">>". Mรฆrkningen af โ€‹โ€‹lรธkker, isรฆr i indlejrede lรธkkekoder, vil give mere lรฆsbarhed. Etiketten kan gives i EXIT-kommandoen for at forlade den pรฅgรฆldende slรธjfe. Ved hjรฆlp af label kan kontrollen udfรธres til direkte at forlade den ydre lรธkke af de indlejrede lรธkker fra et hvilket som helst sted inde i lรธkkerne, ved at give exit-kommandoen efterfulgt af den ydre lรธkke-etiket.

Mรฆrkning af lรธkker

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

Syntaks forklaring:

  • I ovenstรฅende syntaks har ud-lรธkken endnu en lรธkke inde i sig.
  • Den '< >' og '< >' er etiketterne pรฅ disse slรธjfer.

Eksempel 1: I dette eksempel skal vi udskrive nummer fra 1 ved hjรฆlp af Basic loop statement. Hvert tal vil blive udskrevet lige sรฅ mange gange som dets vรฆrdi. Seriens รธvre grรฆnse er fastsat ved programerklรฆringsdelen. Lad os lรฆre, hvordan vi kan bruge mรฆrkekonceptet til at opnรฅ dette. Til det vil vi udfรธre fรธlgende kode

Mรฆrkning af lรธkkerMรฆrkning af 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;
/

Code Forklaring:

  • Code linje 2-3: Erklรฆrer variablen 'a' og 'b' som 'NUMBER' datatype.
  • Code line 4: Erklรฆrer variablen 'upper_limit' som 'NUMBER' datatype med vรฆrdien '4'
  • Code line 6: Udskrivning af erklรฆringen "Program started".
  • Code linje 7: Den ydre lรธkke er blevet mรฆrket som "ydre_lรธkke"
  • Code linje 9: Vรฆrdien af โ€‹โ€‹'a' รธges med 1.
  • Code linje 11: Inner loop er blevet mรฆrket som "inner_loop".
  • Code linje 13: EXIT-betingelse, der kontrollerer, om vรฆrdien 'a' er hรธjere end vรฆrdien 'upper_limit'. Hvis ikke, vil den gรฅ lรฆngere, ellers forlader den den ydre lรธkke direkte.
  • Code linje 14: Udskrivning af vรฆrdien af โ€‹โ€‹'b'.
  • Code linje 15: ร˜ger vรฆrdien af โ€‹โ€‹'b' med +1.
  • Code linje 16: EXIT-betingelse, der kontrollerer, om vรฆrdien af โ€‹โ€‹'b' er hรธjere end 'a'. Hvis det er tilfรฆldet, vil den forlade styringen fra den indre slรธjfe.
  • Code linje 14: Udskrivning af erklรฆringen "Program gennemfรธrt"

Resumรฉ

Loop Grundlรฆggende slรธjfe
EXIT-kriterier Afslut, nรฅr du stรธder pรฅ nรธgleordet 'EXIT' i udfรธrelsesdelen
Brug God at bruge, nรฅr udgangen ikke er baseret pรฅ nogen bestemt tilstand.

Opsummer dette indlรฆg med: