Oracle PL/SQL LOOP med exempel

Vad är loopar?

Loops tillåter att en viss del av koden i ett program exekveras ett önskat antal gånger.

I den här handledningen kommer vi att se loopkonceptet i PL/SQL och flödet av kontroll i loopar.

Introduktion till Loops Concept

Loops-konceptet ger följande fördelar vid kodning.

  • Återanvändbarhet av kod
  • Minskad kodstorlek
  • Enkelt flöde av kontroll
  • Minskad komplexitet

Diagrammet nedan visar looping-konceptet på ett bildligt sätt

Oracle PL/SQL LOOP

I diagrammet ovan kommer loopvillkoret att kontrolleras, och så länge loopvillkoret är uppfyllt kommer exekveringsblocket att exekveras.

I varje iteration bör slingräknarvariabeln som faktiskt bestämmer slingtillståndet modifieras för att få kontrollen att lämna slingan. I vissa fall är denna slingräknarvariabel inkrement/minskningsoperator för ett fördefinierat antal, och i vissa fall är det ett sökvillkor som fortsätter att exekvera blocket tills det uppfyller det.

Uttryck för slingkontroll

Innan man lär sig loops-konceptet är det obligatoriskt att lära sig loop control-satser. Loop control-satser är de som faktiskt styr flödet av exekvering inuti loopen. Nedan finns en detaljerad beskrivning av loopkontrollsatserna.

FORTSÄTTA

Detta nyckelord skickar en instruktion till PL/SQL-motorn att närhelst PL/SQL-motorn stöter på detta nyckelord i slingan, kommer den att hoppa över den återstående koden i kodens exekveringsblock, och nästa iteration kommer att starta omedelbart. Detta kommer främst att användas om koden inuti slingan vill hoppas över för vissa iterationsvärden.

AVSLUTA / AVSLUTA NÄR

Detta nyckelord skickar en instruktion till PL/SQL-motorn att närhelst PL/SQL-motorn stöter på detta nyckelord, kommer den omedelbart att lämna den aktuella slingan. Om PL/SQL-motorn stöter på EXIT i en kapslad loop, så kommer den att komma ut ur loopen i vilken den har definierats, dvs i en kapslad loop, vilket ger EXIT i den inre loopen kommer bara att lämna kontrollen från den inre loopen men inte från den yttre slingan. 'EXIT WHEN' följs av ett uttryck som ger ett booleskt resultat. Om resultatet är TRUE, kommer kontrollen att AVSLUTA.

GOTO

Denna sats kommer att överföra kontrollen till den märkta satsen ("GOTO ;"). Detta har följande begränsningar

  • Överföring av kontroll kan endast göras inom underprogrammen.
  • Överföring av kontroll kan inte göras från undantagshanteringsdelen till utförandedelen

Användning av detta uttalande rekommenderas inte om det inte finns några andra alternativ, eftersom kodkontrollens spårbarhet kommer att vara mycket svår i programmet på grund av överföringen av kontroll från en del till en annan del.

Typer av loopar i PL/SQL

PL / SQL ger följande tre typer av slingor

Grundläggande loop Statement

Denna loop-sats är den enklaste loopstrukturen i PL/SQL. Exekveringsblocket börjar med nyckelordet 'LOOP' och slutar med nyckelordet 'END LOOP'.

Utgångsvillkoret bör ges inuti detta exekveringsblock så att det kontrollerar utgången från slingan.

Det behöver EXIT-nyckelordet anges explicit i exekveringsdelen för att gå ur slingan.

Grundläggande loop Statement

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

Syntaxförklaring:

  • I ovanstående syntax markerar nyckelordet 'LOOP' början av slingan och 'END LOOP' markerar slutet av slingan.
  • Exekveringsblocket innehåller all kod som behöver exekveras inklusive EXIT-villkoret.
  • Exekveringsdelen kan innehålla valfri exekveringssats.

Notera: Grundläggande loop-sats utan EXIT-nyckelord kommer att vara en INFINITE-LOOP som aldrig kommer att sluta.

Exempelvis 1: I det här exemplet kommer vi att skriva ut nummer från 1 till 5 med grundläggande loop-sats. För det kommer vi att köra följande kod.

Grundläggande loop Statement

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:
/

Kodförklaring:

  • Kodrad 2: Deklarerar variabeln 'a' som datatyp 'NUMBER' och initierar den med värdet '1'.
  • Kodrad 4: Skriver ut meddelandet "Program started".
  • Kodrad 5: Nyckelord 'LOOP' markerar början av loopen.
  • Kodrad 6: Skriver ut värdet på 'a'.
  • Kodrad 7: Ökar värdet på 'a' med +1.
  • Kodrad 8: Kontrollerar om värdet på "a" är större än 5.
  • Kodrad 9: Nyckelordet 'END LOOP' markerar slutet på exekveringsblocket.
  • Koden från rad 6 till rad 8 kommer att fortsätta att exekvera tills 'a' når värdet 6, eftersom villkoret kommer att returnera TRUE och kontrollen EXITAR från slingan.
  • Kodrad 10: Skriver ut meddelandet "Program avslutat"

Märkning av loopar

I PL/SQL kan slingorna märkas. Etiketten ska vara innesluten mellan "<<" och ">>". Märkning av slingor, särskilt i kapslade slingkoder, ger mer läsbarhet. Etiketten kan ges i EXIT-kommandot för att lämna den specifika slingan. Med hjälp av etikett kan kontrollen göras för att direkt lämna den yttre slingan av de kapslade slingorna från var som helst inuti slingorna, genom att ge exit-kommandot följt av yttre slingetikett.

Märkning av loopar

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

Syntaxförklaring:

  • I ovanstående syntax har ut-loopen ytterligare en loop inuti.
  • Den '< >' och '< >' är etiketterna för dessa slingor.

Exempelvis 1: I det här exemplet kommer vi att skriva ut nummer från 1 med Basic loop-sats. Varje nummer kommer att skrivas ut lika många gånger som dess värde. Den övre gränsen för serien är fastställd vid programdeklarationsdelen. Låt oss lära oss hur vi kan använda etikettkonceptet för att uppnå detta. För det kommer vi att köra följande kod

Märkning av looparMärkning av loopar

DECLARE
a NUMBER:=0;
b NUMBER;
upper-limit NUMBER :=4;
BEGIN
dbms_output.put_line(‘Program started.' ); 
«outerloop»‭	‬
LOOP 
a:=a+1;
b:=l;
«inner loop»
LOOP
EXIT outer_loop WHEN a > upper_limit;
dbms_output.put_line(a);
b:=b+l;
EXIT inner_loop WHEN b>a;
END LOOP;
END LOOP;
dbms_output.put_line('Program completed.');
END;
/

Kodförklaring:

  • Kodrad 2-3: Deklarerar variablerna 'a' och 'b' som 'NUMBER' datatyp.
  • Kodrad 4: Deklarerar variabeln 'upper_limit' som 'NUMBER' datatyp med värdet '4'
  • Kodrad 6: Skriver ut meddelandet "Program started".
  • Kodrad 7: Den yttre slingan har märkts som "outer_loop"
  • Kodrad 9: Värdet på "a" ökas med 1.
  • Kodrad 11: Inner loop har märkts som "inner_loop".
  • Kodrad 13: EXIT-villkor som kontrollerar om värdet 'a' är högre än 'upper_limit'-värdet. Om inte så kommer den att gå längre, annars lämnar den den yttre slingan direkt.
  • Kodrad 14: Skriver ut värdet på 'b'.
  • Kodrad 15: Ökar värdet på 'b' med +1.
  • Kodrad 16: EXIT-villkor som kontrollerar om värdet på 'b' är högre än 'a'. Om så är fallet kommer den att lämna kontrollen från den inre slingan.
  • Kodrad 14: Skriver ut meddelandet "Program avslutat"

Sammanfattning

loop Grundläggande loop
EXIT-kriterier Avsluta när du stöter på nyckelordet 'EXIT' i exekveringsdelen
Användning Bra att använda när utgången inte är baserad på något speciellt tillstånd.