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.
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.
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:
- Grundlæggende loop statement
- Til loop statement
- Mens loop erklæring
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.
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.
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.
<<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.
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".







