Oracle PL/SQL LOOP med eksempel
Hvad er loops?
Loops tillader en bestemt del af koden i et program at blive eksekveret i det ønskede antal gange.
I denne tutorial skal vi se loop-konceptet i PL/SQL og flow af kontrol i loops.
Introduktion til Loops Concept
Loops-konceptet giver følgende fordel ved kodning.
- Genanvendelighed af kode
- Reduceret kodestørrelse
- Nem flow af kontrol
- Reduceret kompleksitet
Nedenstående diagram viser looping-konceptet på en billedlig måde
I ovenstående diagram vil sløjfebetingelsen blive kontrolleret, og så længe sløjfebetingelsen er opfyldt, vil eksekveringsblokken blive eksekveret.
I hver iteration skal den sløjfetællervariabel, der faktisk bestemmer sløjfebetingelsen, ændres for at få kontrolelementet til at forlade sløjfen. I nogle tilfælde er denne sløjfetællervariabel inkrement/reduktionsoperator for et foruddefineret antal, og i nogle tilfælde er det en søgebetingelse, der bliver ved med at udføre blokken, indtil den opfylder den.
Erklæringer om loopkontrol
Før du lærer loops-konceptet, er det obligatorisk at lære om loop control-sætninger. Sløjfekontroludsagn er dem, der faktisk styrer strømmen af eksekvering inde i løkken. Nedenfor er den detaljerede beskrivelse af sløjfekontrolsætningerne.
FORTSÆT
Dette nøgleord sender en instruktion til PL/SQL-motoren om, at når PL/SQL-motoren støder på dette nøgleord inde i løkken, vil den springe den resterende kode over i kodens udførelsesblok, og næste iteration vil starte med det samme. Dette vil primært blive brugt, hvis koden inde i løkken ønsker at blive sprunget over for bestemte iterationsværdier.
EXIT / EXIT HVORNÅR
Dette nøgleord sender en instruktion til PL/SQL-motoren om, at hver gang PL/SQL-motoren støder på dette nøgleord, vil den straks forlade den aktuelle sløjfe. Hvis PL/SQL-motoren støder på EXIT i en indlejret løkke, så vil den komme ud af den løkke, hvori den er blevet defineret, dvs. i en indlejret løkke, giver EXIT i den indre løkke kun styringen fra den indre løkke, men ikke fra den ydre løkke. 'EXIT WHEN' efterfølges af et udtryk, der giver et boolesk resultat. Hvis resultatet er TRUE, vil kontrollen EXIT.
GOTO
Denne erklæring overfører kontrollen til den mærkede sætning ("GOTO ;"). Dette har følgende begrænsninger
- Overførsel af kontrol kan kun ske inden for underprogrammerne.
- Overførsel af kontrol kan ikke ske fra undtagelseshåndteringsdel til udførelsesdel
Brug af denne erklæring anbefales ikke, medmindre der ikke er andre alternativer, da kodekontrolsporbarheden vil være meget vanskelig i programmet på grund af overførsel af kontrol fra en del til en anden del.
Looptyper i PL/SQL
PL / SQL giver følgende tre typer sløjfer
- Grundlæggende loop statement
- Til loop statement
- Mens loop erklæring
Grundlæggende løkkeerklæring
Denne loop-sætning er den enkleste loop-struktur i PL/SQL. Udførelsesblokken starter med nøgleordet 'LOOP' og slutter med nøgleordet 'END LOOP'.
Udgangsbetingelsen skal angives inde i denne udførelsesblok, således at kontrol forlader sløjfen.
Det kræver, at EXIT-nøgleordet gives eksplicit i udførelsesdelen for at forlade løkken.
LOOP <execution block starts> <EXIT condition based on developer criteria> <execution_block_ends> END LOOP;
Syntaks forklaring:
- I ovenstående syntaks markerer nøgleordet 'LOOP' begyndelsen af løkken og 'END LOOP' markerer slutningen af løkken.
- Udførelsesblokken indeholder al den kode, der skal udføres, inklusive EXIT-betingelsen.
- Udførelsesdelen kan indeholde en hvilken som helst udførelseserklæring.
Bemærk: Grundlæggende loop-sætning uden EXIT-nøgleord vil være en INFINITE-LOOP, der aldrig stopper.
Eksempel 1: I dette eksempel skal vi udskrive nummer fra 1 til 5 ved hjælp af grundlæggende loop-sætning. Til det vil vi udføre følgende kode.
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: /
Kodeforklaring:
- Kodelinje 2: Erklærer variablen 'a' som 'NUMBER' datatype og initialiserer den med værdien '1'.
- Kodelinje 4: Udskrivning af erklæringen "Program started".
- Kodelinje 5: Nøgleord 'LOOP' markerer begyndelsen af løkken.
- Kodelinje 6: Udskriver værdien af 'a'.
- Kodelinje 7: Øger værdien af 'a' med +1.
- Kodelinje 8: Kontrollerer, om værdien af 'a' er større end 5.
- Kodelinje 9: Nøgleordet 'END LOOP' markerer slutningen af udførelsesblokken.
- Koden fra linje 6 til linje 8 vil fortsætte med at udføre, indtil 'a' når værdien 6, da betingelsen returnerer TRUE, og styringen vil EXIT fra løkken.
- Kodelinje 10: Udskrivning af erklæringen "Program gennemført"
Mærkning af løkker
I PL/SQL kan løkkerne mærkes. Etiketten skal være omsluttet mellem "<<" og ">>". Mærkningen af løkker, især i indlejrede løkkekoder, vil give mere læsbarhed. Etiketten kan gives i EXIT-kommandoen for at forlade den pågældende sløjfe. Ved hjælp af label kan kontrollen udføres til direkte at forlade den ydre løkke af de indlejrede løkker fra et hvilket som helst sted inde i løkkerne, ved at give exit-kommandoen efterfulgt af den ydre løkke-etiket.
<<OUTER_LOOP>> LOOP <execution_block_starts> . <<INNER_LOOP>> LOOP --inner <execution_part> END LOOP; . <executi_block_ends> END LOOP;
Syntaks forklaring:
- I ovenstående syntaks har ud-løkken endnu en løkke inde i sig.
- Den '< >' og '< >' er etiketterne på disse sløjfer.
Eksempel 1: I dette eksempel skal vi udskrive nummer fra 1 ved hjælp af Basic loop statement. Hvert tal vil blive udskrevet lige så mange gange som dets værdi. Seriens øvre grænse er fastsat ved programerklæringsdelen. Lad os lære, hvordan vi kan bruge mærkekonceptet til at opnå dette. Til det vil vi udføre følgende kode
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; /
Kodeforklaring:
- Kodelinje 2-3: Erklærer variablen 'a' og 'b' som 'NUMBER' datatype.
- Kodelinje 4: Erklærer variablen 'upper_limit' som 'NUMBER' datatype med værdien '4'
- Kodelinje 6: Udskrivning af erklæringen "Program started".
- Kodelinje 7: Den ydre løkke er blevet mærket som "ydre_løkke"
- Kodelinje 9: Værdien af 'a' øges med 1.
- Kodelinje 11: Inner loop er blevet mærket som "inner_loop".
- Kodelinje 13: EXIT-betingelse, der kontrollerer, om værdien 'a' er højere end værdien 'upper_limit'. Hvis ikke, vil den gå længere, ellers forlader den den ydre løkke direkte.
- Kodelinje 14: Udskrivning af værdien af 'b'.
- Kodelinje 15: Øger værdien af 'b' med +1.
- Kodelinje 16: EXIT-betingelse, der kontrollerer, om værdien af 'b' er højere end 'a'. Hvis det er tilfældet, vil den forlade styringen fra den indre sløjfe.
- Kodelinje 14: Udskrivning af erklæringen "Program gennemført"
Resumé
Loop | Grundlæggende sløjfe |
EXIT-kriterier | Afslut, når du støder på nøgleordet 'EXIT' i udførelsesdelen |
Brug | God at bruge, når udgangen ikke er baseret på nogen bestemt tilstand. |