Oracle PL/SQL FOR LOOP näitega

⚡ Nutikas kokkuvõte

Oracle PL/SQL FOR-tsükkel käivitab koodiploki teadaoleva arvu kordi alumise ja ülemise piiri vahel. Tsüklimuutuja deklareeritakse kaudselt ja see suureneb iseenesest, seega pole käsitsi loendurit vaja, ning REVERSE-võtmesõna laseb tsüklil allapoole lugeda.

  • 🔢 Parim: FOR-tsükkel sobib pigem teadaoleva iteratsioonide arvu kui avatud tingimuse korral.
  • 📏 Range: Alumine ja ülemine piirang määravad, mitu korda tsükkel käivitub.
  • ⚙️ Kaudne vastus: Tsükluse muutuja deklareeritakse automaatselt ja see suureneb iseenesest.
  • 🎯 Reguleerimisala: Tsükluse muutuja eksisteerib ainult tsükli sees.
  • 🔄 TAGURPIDI: REVERSE'i lisamine enne alumist piiri paneb tsükli tagasi loendama.
  • 🪜 Pesastatud: Tsüklid saab pesastada ja sisemine tsükkel töötab iga välimise iteratsiooni jaoks täielikult.
  • 🚪 Automaatne väljumine: Tsükkel lõpeb automaatselt, kui muutuja lahkub vahemikust.

Oracle PL/SQL tsükli jaoks

Mis on FOR-tsükkel?

„FOR LOOP” lause sobib kõige paremini siis, kui soovite koodi käivitada teadaoleva arvu kordi, mitte mingil muul tingimusel.

Selles tsüklis määratakse alumine ja ülemine piir ning seni, kuni tsüklimuutuja jääb nende vahemikku, tsüklit käivitatakse.

Tsüklimuutuja on iseinkrementeeruv, seega pole otsest inkrementeerimisoperatsiooni vaja. Tsüklimuutujat ei ole vaja deklareerida, kuna see deklareeritakse implitsiitselt.

FOR <loop_variable> in <lower_limit> .. <higher_limit>
LOOP
<execution block starts>
.
.
.
<execution_block_ends>
END LOOP;

Süntaksi selgitus:

  • Märksõna „FOR” tähistab tsükli algust ja „END LOOP” tähistab lõppu.
  • Tsüklimuutujat hinnatakse iga kord enne teostusosa käivitamist.
  • Täitmisplokk sisaldab kogu käivitatavat koodi ja võib sisaldada mis tahes käivitatavat lauset.
  • Muutuja (loop_variable) deklareeritakse tsükli täitmise ajal kaudselt ja selle ulatus on ainult tsükli sees.
  • Kui tsükli muutuja liigub vahemikust välja, väljub juhtimine tsüklist.
  • Tsükli saab panna tööle vastupidises järjekorras, lisades enne alumist_limiiti märksõna 'REVERSE'.

Näide 1: Selles näites prindime FOR-tsükli abil numbreid 1-st 5-ni.

FOR-tsükkel prindib numbreid 1 kuni 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 Selgitus:

  • Code rida 2: Lause „Programm käivitatud” printimine.
  • Code rida 3: Märksõna 'FOR' tähistab tsükli algust ja deklareeritakse tsüklimuutuja 'a'. See võtab nüüd väärtused vahemikus 1 kuni 5.
  • Code rida 5: Prindib 'a' väärtuse.
  • Code rida 6: Märksõna 'END LOOP' tähistab täitmisploki lõppu.
  • Rida 5 jätkab täitmist, kuni 'a' saavutab väärtuse 6, mille järel tingimus ebaõnnestub ja juhtimine väljub tsüklist.
  • Code rida 7: Avalduse „Programm lõpetatud” printimine.

Pesastatud silmused

Tsüklilauseid saab ka pesastada. Välised ja sisemised tsüklid võivad olla erinevat tüüpi. Pesastatud tsüklis täidab sisemine tsükkel iga välise tsükli iteratsiooni korral täielikult.

Pesastatud silmusstruktuur

LOOP --outer
<execution block starts>
LOOP --inner
<execution_part>
END LOOP;
<execution_block_ends>
END LOOP;

Süntaksi selgitus:

  • Välimises silmuses on sees veel üks silmus.
  • Tsüklid võivad olla mis tahes tüüpi ja täitmisfunktsionaalsus on sama.

Näide 1: Selles näites prindime FOR-tsükli abil numbreid 1 kuni 3. Iga arv prinditakse nii mitu korda kui selle väärtus.

Pesastatud FOR-tsükli näide 1. osa

Pesastatud FOR-tsükli näide 2. osa

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

  • Code rida 2: Muutuja 'b' deklareerimine andmetüübina 'NUMBER'.
  • Code rida 4: Lause „Programm käivitatud” printimine.
  • Code rida 5: Märksõna 'FOR' tähistab tsükli algust ja deklareeritakse tsüklimuutuja 'a'. See võtab nüüd väärtused vahemikus 1 kuni 3.
  • Code rida 7: 'b' väärtuse lähtestamine iga kord väärtusele 1.
  • Code rida 8: Sisemine samas silmus kontrollib tingimust a>=b.
  • Code rida 10: Prindib „a” väärtuse seni, kuni ülaltoodud tingimus on täidetud.
  • Code rida 14: Avalduse „Programm lõpetatud” printimine.

FOR-tsükkel ja REVERSE FOR-tsükkel

Vaikimisi loendab FOR-tsükkel alumisest piirist ülemise piirini ülespoole. Märksõna REVERSE lisamine paneb loendama allapoole, samal ajal kui keeping piirid samas järjekorras. Mõlemad vormid on allpool koos näidatud, seega on erinevus selge.

vorm Päise Väärtuste järjekord
Kasvav IN 1 .. 5 jaoks 1, 2, 3, 4, 5
Kahanev TAGURPIDI 1 .. 5 jaoks 5, 4, 3, 2, 1

Pane tähele, et isegi REVERSE'i korral kirjutatakse alumine piir ikkagi enne ülemist piiri; muutub ainult iteratsiooni suund. Tsüklite puhul, mille arv pole ette teada, põhitsükkel on parem valik.

KKK

Ei. FOR-tsükkel deklareerib oma muutuja kaudselt ja see eksisteerib ainult tsükli sees. Samanimelise muutuja deklareerimine väljaspool tsüklit ei mõjuta tsükli poolt kasutatavat muutujat.

REVERSE paneb tsükli itereerima kõrgemast piirist alumise piirini. Piirväärtused kirjutatakse endiselt madalamast kõrgemani; ainult väärtuste külastamise järjekord on vastupidine.

FOR-tsüklit kasutatakse siis, kui iteratsioonide arv on ette teada, näiteks fikseeritud vahemiku korral. WHILE-tsüklit kasutatakse siis, kui tsükkel peaks jätkuma seni, kuni tingimus kehtib ja arv pole fikseeritud.

Jah, kui põhitsükkel loendab lihtsalt kahe fikseeritud väärtuse vahel. Tehisintellekt saab käsitsi loenduri ja EXIT-i asendada FOR-vahemikuga, muutes koodi lühemaks. Veenduge, et piirid vastavad originaalile.

Ei. Tsükli muutuja on tsükli sees kirjutuskaitstud, seega sellele omistamine tekitab kompileerimisvea. Töövoo muutmiseks kasuta eraldi muutujat või välju tsüklist EXIT-iga.

Võta see postitus kokku järgmiselt: