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.

  • ๐Ÿ” Formรฅl: En lรธkke kjรธrer en kodeblokk mange ganger, noe som reduserer kodestรธrrelse og kompleksitet.
  • ๐Ÿงญ Lรธkketeller: En tellervariabel bestemmer lรธkkebetingelsen og mรฅ endres slik at lรธkken kan avsluttes.
  • โญ๏ธ FORTSETTE: Hopper over resten av gjeldende iterasjon og starter den neste.
  • ๐Ÿšช UTGANG / UTGANG Nร…R: Forlater lรธkken umiddelbart, eventuelt nรฅr en boolsk betingelse er sann.
  • ๐Ÿท๏ธ etiketter: En lรธkkeetikett mellom doble vinkelparenteser lar EXIT mรฅlrette en ytre lรธkke.
  • โ™พ๏ธ Grunnleggende lรธkke: Kjรธrer til en eksplisitt EXIT nรฅs; uten en lรธkkes den i en evig lรธkke.
  • ๐Ÿงฉ Tre typer: Grunnleggende lรธkke, FOR-lรธkke og WHILE-lรธkke dekker de vanlige mรธnstrene.

Oracle PL/SQL-lรธkke

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.

Looping konseptflyt i PL/SQL

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:

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.

Grunnleggende lรธkkestruktur i PL/SQL

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.

Grunnleggende lรธkkeutskriftstall 1 til 5

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.

Merket nestet lรธkkestruktur

<<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.

Eksempel pรฅ merket lรธkke del 1Eksempel pรฅ merket lรธkke del 2

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ยป.

Spรธrsmรฅl og svar

EXIT forlater lรธkken ubetinget. EXIT WHEN forlater den bare nรฅr fรธlgende boolske uttrykk er sant, noe som fjerner behovet for en separat HVIS rundt en ren EXIT.

En etikett lar en EXIT i en indre lรธkke forlate en navngitt ytre lรธkke i ett trinn. Det gjรธr ogsรฅ nestet kode mye enklere รฅ lese enn trackongelige enkle END LOOP-setninger.

Hvis blokken ikke har noen EXIT, eller telleren aldri nรฅr exit-betingelsen, stopper lรธkken aldri. Sรธrg alltid for at telleren endrer seg mot EXIT WHEN-betingelsen.

Ofte, ja. AI kan trace om telleren beveger seg mot EXIT-tilstanden og advarer nรฅr en lรธkke ikke har noen tilgjengelig utgang, selv om en dataavhengig utgang fortsatt trenger en testkjรธring for รฅ bekrefte.

CONTINUE hopper over resten av gjeldende iterasjon og gรฅr videre til neste. Dette er nyttig nรฅr visse verdier skal ignoreres uten รฅ forlate lรธkken helt.

Oppsummer dette innlegget med: