Oracle PL/SQL FOR LOOP med eksempel
⚡ Smart opsummering
Oracle PL/SQL FOR Loop kører en kodeblok et kendt antal gange mellem en nedre og en højere grænse. Loopvariablen deklareres implicit og selvøger, så der er ikke behov for en manuel tæller, og REVERSE-nøgleordet lader løkken tælle nedad.
Hvad er en FOR-løkke?
"FOR LOOP"-sætningen er bedst egnet, når du vil udføre kode et kendt antal gange, i stedet for baseret på en anden betingelse.
I denne løkke er en nedre grænse og en øvre grænse angivet, og så længe løkkevariablen er inden for dette område, udføres løkken.
Løkkevariablen er selvinkrementel, så der kræves ingen eksplicit inkrementeringsoperation. Løkkevariablen behøver ikke at blive deklareret, da den deklareres implicit.
FOR <loop_variable> in <lower_limit> .. <higher_limit> LOOP <execution block starts> . . . <execution_block_ends> END LOOP;
Syntaks forklaring:
- Nøgleordet 'FOR' markerer begyndelsen af løkken, og 'END LOOP' markerer slutningen.
- Løkkevariablen evalueres hver gang før udførelsesdelen udføres.
- Udførelsesblokken indeholder al den kode, der skal køres, og kan indeholde enhver eksekverbar sætning.
- loop_variablen deklareres implicit under udførelsen af løfen, og dens omfang er kun inden for løfen.
- Når løkkevariablen bevæger sig uden for området, afslutter kontrollen løkken.
- Løkken kan fås til at fungere i omvendt rækkefølge ved at tilføje nøgleordet 'REVERSE' før lower_limit.
Eksempel 1: I dette eksempel udskriver vi tal fra 1 til 5 ved hjælp af en FOR-løkkesætning.
BEGIN dbms_output.put_line('Program started.'); FOR a IN 1 .. 5 LOOP dbms_output.put_line(a); END LOOP; dbms_output.put_line('Program completed.'); END; /
Code Forklaring:
- Code linje 2: Udskriver meddelelsen "Program startet".
- Code linje 3: Nøgleordet 'FOR' markerer starten af løkken, og loop_variablen 'a' erklæres. Den tager nu værdier fra 1 til 5.
- Code linje 5: Udskriver værdien af 'a'.
- Code linje 6: Nøgleordet 'END LOOP' markerer slutningen af udførelsesblokken.
- Linje 5 fortsætter med at udføres, indtil 'a' når værdien 6, hvor betingelsen fejler, og kontrollen afslutter løkken.
- Code linje 7: Udskriver meddelelsen "Program afsluttet".
Indlejrede sløjfer
Loop-sætninger kan også være indlejrede. De ydre og indre løkker kan være af forskellige typer. I en indlejret løkke udføres den indre løkke fuldt ud for hver iteration af den ydre løkke.
LOOP --outer <execution block starts> LOOP --inner <execution_part> END LOOP; <execution_block_ends> END LOOP;
Syntaks forklaring:
- Den ydre løkke har endnu en løkke indeni.
- Løkkerne kan være af enhver type, og udførelsesfunktionaliteten er den samme.
Eksempel 1: I dette eksempel udskriver vi tal fra 1 til 3 ved hjælp af en FOR-løkkesætning. Hvert tal udskrives lige så mange gange som dets værdi.
DECLARE b NUMBER; BEGIN dbms_output.put_line('Program started'); FOR a IN 1..3 LOOP b:= 1; WHILE (a>=b) LOOP dbms_output.put_line(a); b:= b+1; END LOOP; END LOOP; dbms_output.put_line('Program completed'); END; /
Code Forklaring:
- Code linje 2: Deklarering af variablen 'b' som datatypen 'NUMBER'.
- Code linje 4: Udskriver meddelelsen "Program startet".
- Code linje 5: Nøgleordet 'FOR' markerer starten af løkken, og loop_variablen 'a' erklæres. Den tager nu værdier fra 1 til 3.
- Code linje 7: Nulstilling af værdien af 'b' til '1' hver gang.
- Code linje 8: Det indre mens løkke kontrollerer betingelsen a>=b.
- Code linje 10: Udskriver værdien af 'a', så længe ovenstående betingelse er opfyldt.
- Code linje 14: Udskriver meddelelsen "Program afsluttet".
FOR Loop og REVERSE FOR Loop
Som standard tæller et FOR-løkke opad fra den nedre grænse til den øvre grænse. Tilføjelse af REVERSE-nøgleordet får det til at tælle nedad, mens keepping grænserne i samme rækkefølge. Begge former er vist sammen nedenfor, så forskellen er tydelig.
| Form | Header | Rækkefølge af værdier |
|---|---|---|
| Stigende | FOR EN I 1 .. 5 | 1, 2, 3, 4, 5 |
| Faldende | FOR en OMGIVNING 1 .. 5 | 5, 4, 3, 2, 1 |
Bemærk, at selv med REVERSE skrives den nedre grænse stadig før den højere grænse; kun iterationens retning ændres. For løkker, hvis antal ikke er kendt på forhånd, er grundlæggende løkke er det bedre valg.





