Oracle PL/SQL FÖR LOOP med exempel
⚡ Smart sammanfattning
Oracle PL/SQL FOR Loop kör ett kodblock ett känt antal gånger mellan en nedre och en högre gräns. Loopvariabeln deklareras implicit och självökar, så ingen manuell räknare behövs, och nyckelordet REVERSE låter loopen räkna nedåt.
Vad är en FOR-loop?
"FOR LOOP"-satsen passar bäst när du vill exekvera kod ett känt antal gånger, snarare än baserat på något annat villkor.
I denna loop anges en nedre gräns och en övre gräns, och så länge loopvariabeln ligger inom detta område exekveras loopen.
Loopvariabeln är självinkrementell, så ingen explicit inkrementell operation behövs. Loopvariabeln behöver inte deklareras, eftersom den deklareras implicit.
FOR <loop_variable> in <lower_limit> .. <higher_limit> LOOP <execution block starts> . . . <execution_block_ends> END LOOP;
Syntaxförklaring:
- Nyckelordet 'FOR' markerar början på loopen och 'END LOOP' markerar slutet.
- Loopvariabeln utvärderas varje gång innan exekveringsdelen körs.
- Exekveringsblocket innehåller all kod som behöver köras och kan innehålla valfri körbar sats.
- loop_variabeln deklareras implicit under loopens exekvering, och dess omfattning ligger endast inuti loopen.
- När loopvariabeln flyttas utanför intervallet lämnar kontrollen loopen.
- Loopen kan fås att fungera i omvänd ordning genom att lägga till nyckelordet 'REVERSE' före lower_limit.
Exempel 1: I det här exemplet skriver vi ut tal från 1 till 5 med hjälp av en FOR-loop-sats.
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 Förklaring:
- Code rad 2: Skriver ut meddelandet ”Programmet startade”.
- Code rad 3: Nyckelordet 'FOR' markerar början på loopen och loop_variabeln 'a' deklareras. Den tar nu värden från 1 till 5.
- Code rad 5: Skriver ut värdet på 'a'.
- Code rad 6: Nyckelordet 'END LOOP' markerar slutet på exekveringsblocket.
- Rad 5 fortsätter att köras tills 'a' når värdet 6, då villkoret misslyckas och kontrollen lämnar loopen.
- Code rad 7: Skriver ut meddelandet ”Program slutfört”.
Kapslade loopar
Loopsatser kan också kapslas. De yttre och inre looparna kan vara av olika typer. I en kapslad loop exekveras den inre loopen fullständigt för varje iteration av den yttre loopen.
LOOP --outer <execution block starts> LOOP --inner <execution_part> END LOOP; <execution_block_ends> END LOOP;
Syntaxförklaring:
- Den yttre slingan har ytterligare en slinga inuti.
- Looparna kan vara av vilken typ som helst, och exekveringsfunktionaliteten är densamma.
Exempel 1: I det här exemplet skriver vi ut tal från 1 till 3 med hjälp av en FOR-loopsats. Varje tal skrivs ut lika många gånger som dess värde.
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 Förklaring:
- Code rad 2: Deklarerar variabeln 'b' som datatypen 'NUMBER'.
- Code rad 4: Skriver ut meddelandet ”Programmet startade”.
- Code rad 5: Nyckelordet 'FOR' markerar början på loopen och loop_variabeln 'a' deklareras. Den tar nu värden från 1 till 3.
- Code rad 7: Återställ värdet på 'b' till '1' varje gång.
- Code rad 8: Det inre medan slingan kontrollerar villkoret a>=b.
- Code rad 10: Skriver ut värdet på "a" så länge som ovanstående villkor är uppfyllt.
- Code rad 14: Skriver ut meddelandet ”Program slutfört”.
FÖR-loop och OMVÄND FÖR-loop
Som standard räknar en FOR-slinga uppåt från den nedre gränsen till den övre gränsen. Om man lägger till nyckelordet REVERSE räknas den nedåt medan keeping gränserna i samma ordning. Båda formerna visas tillsammans nedan så skillnaden är tydlig.
| Form | Sidhuvud | Värdeordning |
|---|---|---|
| Stigande | FÖR EN I 1 .. 5 | 1, 2, 3, 4, 5 |
| Omvänd | FÖR en I BACKVÄG 1 .. 5 | 5, 4, 3, 2, 1 |
Observera att även med REVERSE skrivs den nedre gränsen fortfarande före den övre gränsen; endast iterationens riktning ändras. För loopar vars antal inte är känt i förväg, grundläggande loop är det bättre valet.





