Oracle PL/SQL LOOP med eksempel

⚡ Smart opsummering

PL/SQL-løkker udfører en kodesektion gentagne gange et ønsket antal gange. PL/SQL tilbyder basale FOR- og WHILE-løkker, der styres af CONTINUE, EXIT, EXIT WHEN og GOTO, og løkker kan mærkes for at administrere indbyggede strukturer overskueligt.

  • 🔁 Formål: Et loop kører en kodeblok mange gange, hvilket reducerer kodens størrelse og kompleksitet.
  • 🧭 Løkketæller: En tællervariabel bestemmer løkkebetingelsen og skal ændres, for at løkken kan afsluttes.
  • ⏭️ FORTSÆTTE: Springer resten af ​​den aktuelle iteration over og starter den næste.
  • 🚪 UDGANG / UDGANG NÅR: Forlader løkken med det samme, eventuelt når en boolsk betingelse er sand.
  • 🏷️ Etiketter: En løkkenavn mellem dobbelte vinkelparenteser lader EXIT målrette et ydre loop.
  • ♾️ Grundlæggende løkke: Kører indtil en eksplicit EXIT nås; uden en looper den i en evighed.
  • 🧩 Tre typer: Basisløkker, FOR-løkker og WHILE-løkker dækker de almindelige mønstre.

Oracle PL/SQL-løkke

Hvad er loops?

Loops tillader en bestemt del af koden i et program at blive udført det ønskede antal gange. I denne vejledning ser vi på loop-konceptet i PL/SQL og kontrolflowet i loops.

Introduktion til Loops-konceptet

Loops-konceptet giver følgende fordele inden for kodning:

  • Genbrugelighed af kode.
  • Reduceret kodestørrelse.
  • Nem kontrolflow.
  • Reduceret kompleksitet.

Diagrammet nedenfor viser toilettetping koncept.

Looping konceptflow i PL/SQL

I diagrammet ovenfor kontrolleres løkkebetingelsen, og så længe den er opfyldt, kører udførelsesblokken.

I hver iteration skal loop-tællervariablen, der bestemmer loop-betingelsen, ændres for at få kontrollen til at forlade loopen. I nogle tilfælde er denne tæller en forøgelse eller et fald for et foruddefineret antal, og i andre er det en søgebetingelse, der fortsætter med at udføre blokken, indtil den er opfyldt.

Erklæringer om loopkontrol

Før man lærer loop-konceptet at kende, er det vigtigt at lære loop-kontrolsætningerne. Disse sætninger styrer udførelsesflowet i et loop.

FORTSÆT

Dette nøgleord instruerer PL/SQL-motoren om, at når den støder på CONTINUE i et loop, springer den den resterende kode i udførelsesblokken over og starter den næste iteration med det samme. Dette bruges primært, når koden i loopet skal springes over for bestemte iterationsværdier.

EXIT / EXIT HVORNÅR

Dette nøgleord instruerer PL/SQL-motoren til øjeblikkeligt at afslutte den aktuelle løkke. I en indlejret løkke afslutter EXIT i den indre løkke kun den indre løkke, ikke den ydre løkke. 'EXIT WHEN' efterfølges af et udtryk, der giver et boolsk resultat; hvis resultatet er TRUE, afsluttes kontrollen.

GOTO

Denne sætning overfører kontrollen til en mærket sætning ("GOTO ;"). Den har følgende begrænsninger:

  • Overførsel af kontrol kan kun ske inden for underprogrammerne.
  • Overførsel af kontrol kan ikke ske fra undtagelseshåndteringsdelen til udførelsesdelen.

Det anbefales ikke at bruge denne sætning, medmindre der ikke er noget alternativ, fordi kodekontrollen tracDet bliver meget vanskeligt at opnå kontrol, når kontrollen overføres fra én del til en anden.

Looptyper i PL/SQL

PL / SQL tilbyder følgende tre typer af løkker:

Tabellen nedenfor kontrasterer de tre, før det grundlæggende loop gennemgås i detaljer.

Loop Udgangskriterier Bedste brugt når
Grundlæggende løkke Eksplicit UDGANG i blokken Udgangen er ikke baseret på et fast antal eller en fast betingelse
FOR sløjfe Tælleren når sin ende Antallet af iterationer er kendt på forhånd
WHILE-løkke Betingelsen bliver falsk Løkken skal køre, mens en betingelse gælder

Grundlæggende løkkeerklæring

Dette er den enkleste loopstruktur i PL/SQL. Udførelsesblokken starter med nøgleordet 'LOOP' og slutter med 'END LOOP'. Afslutningsbetingelsen skal angives inde i udførelsesblokken, så kontrollen afslutter loopen, og nøgleordet EXIT skal angives eksplicit.

Grundlæggende loopstruktur i PL/SQL

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

Syntaks forklaring:

  • Nøgleordet 'LOOP' markerer begyndelsen af ​​løkken, og 'END LOOP' markerer slutningen.
  • Udførelsesblokken indeholder al den kode, der skal køres, inklusive EXIT-betingelsen.
  • Udførelsesdelen kan indeholde en hvilken som helst eksekverbar sætning.

Bemærk: En grundlæggende loop-sætning uden et EXIT-nøgleord er en uendelig løkke, der aldrig stopper.

Eksempel 1: I dette eksempel udskriver vi tal fra 1 til 5 ved hjælp af en grundlæggende løkkesætning.

Grundlæggende loopprintnumre 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: Deklarerer variablen 'a' som 'NUMBER' og initialiserer den med værdien '1'.
  • Code linje 4: Udskriver meddelelsen "Program startet".
  • Code linje 5: Nøgleordet '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.
  • Linje 6 til 8 fortsætter med at udføres, indtil 'a' når 6, hvor betingelsen returnerer TRUE, og kontrollen afslutter løkken.
  • Code linje 10: Udskriver meddelelsen "Program afsluttet".

Mærkning af løkker

I PL/SQL kan løkker mærkes. Mærkningen skal være omsluttet mellem "<<" og ">>". Mærkning af løkker, især i indbyggede løkker, giver større læsbarhed. Mærkningen kan gives i en EXIT-kommando for at afslutte den pågældende løkke, så kontrollen kan afslutte den ydre løkke af en indbygget struktur direkte ved at give EXIT-kommandoen efterfulgt af den ydre løkke-mærkning.

Mærket indlejret løkkestruktur

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

Syntaks forklaring:

  • Den ydre løkke har endnu en løkke indeni.
  • '< >' og '< >' er etiketterne for disse løkker.

Eksempel 1: I dette eksempel udskriver vi tal startende fra 1 ved hjælp af en grundlæggende løkkesætning. Hvert tal udskrives lige så mange gange som dets værdi. Den øvre grænse for serien er fastsat i deklarationsdelen. Vi bruger label-konceptet til at opnå dette.

Eksempel på mærket løkke del 1Eksempel på mærket 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: Deklarering af variablerne 'a' og 'b' som datatypen 'NUMBER'.
  • Code linje 4: Deklarerer variablen 'upper_limit' som 'NUMBER' med værdien '4'.
  • Code linje 6: Udskriver meddelelsen "Program startet".
  • Code linje 7: Den ydre løkke er mærket "outer_loop".
  • Code linje 9: Værdien af ​​'a' øges med 1.
  • Code linje 11: Den indre løkke er mærket "inner_loop".
  • Code linje 13: EXIT-betingelse, der kontrollerer, om 'a' er højere end værdien 'upper_limit'. Hvis ikke, går den videre; 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 'b' er højere end 'a'. Hvis det er tilfældet, forlader den den indre løkke.
  • Code linje 19: Udskriver meddelelsen "Program afsluttet".

Ofte Stillede Spørgsmål

EXIT forlader løkken ubetinget. EXIT WHEN forlader den kun, når følgende boolske udtryk er sandt, hvilket fjerner behovet for en separat IF omkring en almindelig EXIT.

En label lader en EXIT i et indre loop forlade et navngivet ydre loop i ét trin. Det gør også indlejret kode langt nemmere at læse end trackonge almindelige END LOOP-udsagn.

Hvis blokken ikke har nogen EXIT, eller tælleren aldrig når exit-betingelsen, stopper løkken aldrig. Sørg altid for, at tælleren ændrer sig mod EXIT WHEN-betingelsen.

Ofte, ja. AI kan trace om tælleren bevæger sig mod EXIT-betingelsen og advarer, når en løkke ikke har nogen tilgængelig udgang, selvom en dataafhængig udgang stadig kræver en testkørsel for at bekræfte.

CONTINUE springer resten af ​​den aktuelle iteration over og hopper til den næste. Det er nyttigt, når bestemte værdier skal ignoreres uden at forlade løkken helt.

Opsummer dette indlæg med: