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
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 loop statement
- Til loop statement
- Mens loop erklรฆring
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.
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.
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.
<<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
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. |






