Oracle PL/SQL LOOP med eksempel
โก Smart oppsummering
PL/SQL-lรธkker kjรธrer en del kode gjentatte ganger et รธnsket antall ganger. PL/SQL tilbyr grunnleggende FOR- og WHILE-lรธkker, kontrollert av CONTINUE, EXIT, EXIT WHEN og GOTO, og lรธkker kan merkes for รฅ administrere nestede strukturer pรฅ en ryddig mรฅte.

Hva er Loops?
Lรธkker tillater at en viss del av koden i et program kjรธres det รธnskede antall ganger. I denne veiledningen ser vi pรฅ lรธkkekonseptet i PL/SQL og kontrollflyten i lรธkker.
Introduksjon til Loops-konseptet
Loops-konseptet gir fรธlgende fordeler innen koding:
- Gjenbrukbarhet av kode.
- Redusert kodestรธrrelse.
- Enkel flyt av kontroll.
- Redusert kompleksitet.
Diagrammet nedenfor viser toalettetping konsept.
I diagrammet ovenfor kontrolleres lรธkkebetingelsen, og sรฅ lenge den er oppfylt, kjรธrer utfรธrelsesblokken.
I hver iterasjon skal lรธkketellervariabelen som bestemmer lรธkkebetingelsen endres for รฅ fรฅ kontrollen til รฅ gรฅ ut av lรธkken. I noen tilfeller er denne telleren en รธkning eller reduksjon for et forhรฅndsdefinert antall, og i andre er det en sรธkebetingelse som fortsetter รฅ kjรธre blokken til den er oppfylt.
Uttalelser om slรธyfekontroll
Fรธr du lรฆrer deg lรธkkekonseptet, er det viktig รฅ lรฆre lรธkkekontrollsetningene. Disse setningene styrer flyten av utfรธrelse i en lรธkke.
FORTSETT
Dette nรธkkelordet instruerer PL/SQL-motoren om at nรฅr den mรธter CONTINUE i en lรธkke, hopper den over den gjenvรฆrende koden i utfรธrelsesblokken og starter neste iterasjon umiddelbart. Dette brukes hovedsakelig nรฅr koden i lรธkken skal hoppes over for bestemte iterasjonsverdier.
EXIT / EXIT Nร R
Dette nรธkkelordet instruerer PL/SQL-motoren til รฅ avslutte den gjeldende lรธkken umiddelbart. I en nestet lรธkke avslutter EXIT i den indre lรธkken bare den indre lรธkken, ikke den ytre lรธkken. 'EXIT WHEN' etterfรธlges av et uttrykk som gir et boolsk resultat; hvis resultatet er TRUE, avsluttes kontrollen.
GOTO
Denne setningen overfรธrer kontroll til en merket setning (ยซGOTO ;ยป). Den har fรธlgende begrensninger:
- Overfรธring av kontroll kan bare gjรธres innenfor underprogrammene.
- Kontrolloverfรธring kan ikke gjรธres fra unntakshรฅndteringsdelen til utfรธrelsesdelen.
Det anbefales ikke รฅ bruke denne setningen med mindre det ikke finnes noe alternativ, fordi kodekontrollen traceffektivitet blir veldig vanskelig nรฅr kontroll overfรธres fra en del til en annen.
Looptyper i PL/SQL
PL / SQL tilbyr fรธlgende tre typer lรธkker:
- Grunnleggende loop statement
- For loop statement
- Mens loop uttalelse
Tabellen nedenfor kontrasterer de tre fรธr den grunnleggende slรธyfen dekkes i detalj.
| Loop | Utgangskriterier | Best brukt nรฅr |
|---|---|---|
| Grunnleggende lรธkke | Eksplisitt UTGANG i blokken | Utgangen er ikke basert pรฅ et fast antall eller en betingelse |
| FOR lรธkke | Telleren nรฅr slutten av sitt omrรฅde | Antall iterasjoner er kjent pรฅ forhรฅnd |
| WHILE-lรธkke | Tilstanden blir falsk | Lรธkken skal kjรธres mens en betingelse opprettholdes |
Grunnleggende lรธkkeerklรฆring
Dette er den enkleste lรธkkestrukturen i PL/SQL. Utfรธrelsesblokken starter med nรธkkelordet 'LOOP' og slutter med 'END LOOP'. Avslutningsbetingelsen bรธr gis inne i utfรธrelsesblokken slik at kontrollen avslutter lรธkken, og nรธkkelordet EXIT mรฅ gis eksplisitt.
LOOP <execution block starts> <EXIT condition based on developer criteria> <execution_block_ends> END LOOP;
Syntaks forklaring:
- Nรธkkelordet ยซLOOPยป markerer begynnelsen av lรธkken og ยซEND LOOPยป markerer slutten.
- Utfรธrelsesblokken inneholder all koden som mรฅ kjรธres, inkludert EXIT-betingelsen.
- Utfรธrelsesdelen kan inneholde en hvilken som helst kjรธrbar setning.
OBS: En grunnleggende lรธkkesetning uten EXIT-nรธkkelord er en uendelig lรธkke som aldri stopper.
Eksempel 1: I dette eksemplet skriver vi ut tall fra 1 til 5 ved hjelp av en enkel lรธkkesetning.
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 linje 2: Deklarer variabelen 'a' som 'NUMBER' og initialiserer den med verdien '1'.
- Code linje 4: Skriver ut setningen ยซProgrammet startetยป.
- Code linje 5: Nรธkkelordet ยซLOOPยป markerer begynnelsen av lรธkken.
- Code linje 6: Skriver ut verdien av 'a'.
- Code linje 7: รker verdien av 'a' med 1.
- Code linje 8: Sjekker om verdien av 'a' er stรธrre enn 5.
- Code linje 9: Nรธkkelordet 'END LOOP' markerer slutten pรฅ utfรธrelsesblokken.
- Linje 6 til 8 fortsetter รฅ kjรธres til 'a' nรฅr 6, hvor betingelsen returnerer SANN og kontrollen avslutter lรธkken.
- Code linje 10: Skriver ut meldingen ยซProgram fullfรธrtยป.
Merking av lรธkker
I PL/SQL kan lรธkker merkes. Etiketten bรธr omsluttes mellom ยซ<<ยป og ยซ>>ยป. Merking av lรธkker, spesielt i nestede lรธkker, gir bedre lesbarhet. Etiketten kan gis i en EXIT-kommando for รฅ avslutte den bestemte lรธkken, slik at kontrollen kan avslutte den ytre lรธkken til en nestet struktur direkte ved รฅ gi EXIT-kommandoen etterfulgt av den ytre lรธkkeetiketten.
<<OUTER_LOOP>> LOOP <execution_block_starts> . <<INNER_LOOP>> LOOP --inner <execution_part> END LOOP; . <execution_block_ends> END LOOP;
Syntaks forklaring:
- Den ytre lรธkken har รฉn lรธkke til inni seg.
- '< >' og '< >' er etikettene til disse lรธkkene.
Eksempel 1: I dette eksemplet skriver vi ut tall som starter fra 1 ved hjelp av en enkel lรธkkesetning. Hvert tall skrives ut sรฅ mange ganger som verdien er. Den รธvre grensen for serien er fastsatt i deklarasjonsdelen. Vi bruker etikettkonseptet for รฅ oppnรฅ dette.
DECLARE a NUMBER:= 0; b NUMBER; upper_limit NUMBER := 4; BEGIN dbms_output.put_line('Program started.'); <<outer_loop>> LOOP a:= a+1; b:= 1; <<inner_loop>> LOOP EXIT outer_loop WHEN a > upper_limit; dbms_output.put_line(a); b:= b+1; EXIT inner_loop WHEN b>a; END LOOP; END LOOP; dbms_output.put_line('Program completed.'); END; /
Code Forklaring:
- Code linje 2โ3: Deklarerer variablene 'a' og 'b' som datatypen 'NUMBER'.
- Code linje 4: Deklarerer variabelen 'upper_limit' som 'NUMBER' med verdien '4'.
- Code linje 6: Skriver ut setningen ยซProgrammet startetยป.
- Code linje 7: Den ytre lรธkken er merket ยซytterlรธkkeยป.
- Code linje 9: Verdien av 'a' รธkes med 1.
- Code linje 11: Den indre lรธkken er merket ยซinner_loopยป.
- Code linje 13: EXIT-betingelse som sjekker om 'a' er hรธyere enn verdien 'upper_limit'. Hvis ikke, gรฅr den videre; ellers gรฅr den direkte ut av den ytre lรธkken.
- Code linje 14: Skriver ut verdien av 'b'.
- Code linje 15: รker verdien av 'b' med 1.
- Code linje 16: EXIT-betingelse som sjekker om 'b' er hรธyere enn 'a'. Hvis det er tilfelle, gรฅr den ut av den indre lรธkken.
- Code linje 19: Skriver ut meldingen ยซProgram fullfรธrtยป.






