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.

  • 🔢 Bäst för: En FOR-slinga passar ett känt iterationsantal snarare än ett öppet villkor.
  • 📏 Räckvidd: En nedre och en övre gräns anger hur många gånger loopen körs.
  • ⚙️ Implicit räknare: Loopvariabeln deklareras automatiskt och ökar av sig själv.
  • 🎯 Omfattning: Loopvariabeln finns bara inuti loopen.
  • 🔄 MOTSATT: Om du lägger till REVERSE före den nedre gränsen räknar loopen ner.
  • 🪜 Kapslad: Loopar kan nästlas, och den inre loopen körs fullt ut för varje yttre iteration.
  • 🚪 Automatisk utgång: Loopen avslutas automatiskt när variabeln lämnar intervallet.

Oracle PL/SQL för loopar

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.

FÖR looputskrift nummer 1 till 5

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.

Kapslad loopstruktur

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.

Exempel på kapslad FOR-loop del 1

Exempel på kapslad FOR-loop del 2

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.

Vanliga frågor

Nej. FOR-loopen deklarerar sin variabel implicit, och den finns bara inuti loopen. Att deklarera en variabel med samma namn utanför loopen påverkar inte den variabel som används av loopen.

REVERSE gör att loopen itererar från den övre gränsen ner till den nedre gränsen. Gränserna skrivs fortfarande från låg till hög; endast den ordning i vilken värdena besöks är omvänd.

Använd en FOR-loop när antalet iterationer är känt i förväg, till exempel ett fast intervall. Använd en WHILE-loop när loopen ska fortsätta medan ett villkor gäller och antalet inte är fast.

Ja, när den grundläggande loopen helt enkelt räknar mellan två fasta värden. AI kan ersätta den manuella räknaren och EXIT med ett FOR-intervall, vilket gör koden kortare. Bekräfta att gränserna matchar originalet.

Nej. Loopvariabeln är skrivskyddad inuti loopen, så en tilldelning till den ger ett kompileringsfel. För att ändra flödet, använd en separat variabel eller avsluta loopen med EXIT.

Sammanfatta detta inlägg med: