Oracle PL/SQL tsükkel koos näitega

⚡ Nutikas kokkuvõte

PL/SQL-tsüklid käivitavad koodilõiku korduvalt soovitud arv kordi. PL/SQL pakub põhilisi FOR- ja WHILE-tsükleid, mida juhivad CONTINUE, EXIT, EXIT WHEN ja GOTO käsud, ning tsükleid saab märgistada, et pesastatud struktuure selgelt hallata.

  • 🔁 Eesmärk: Tsükkel käivitab koodiploki mitu korda, vähendades koodi suurust ja keerukust.
  • 🧭 Tsükli loendur: Loendurmuutuja määrab tsükli tingimuse ja peab muutuma, et tsükkel saaks väljuda.
  • ⏭️ JÄTKUB: Jätab ülejäänud praeguse iteratsiooni vahele ja alustab järgmist.
  • 🚪 VÄLJAPÄÄS / VÄLJAPÄÄS MILLAL: Lahkub tsüklist kohe, valikuliselt, kui Boole'i ​​tingimus on tõene.
  • ???? ️ Labels: Topeltnurksulgudes olev tsükli silt laseb EXIT-il sihtida välimist tsüklit.
  • ♾️ Põhiline tsükkel: Töötab kuni selgesõnalise EXIT-väljapääsuni; ilma selleta tsükkel lõpeb lõputult.
  • 🧩 Kolm tüüpi: Tavaline tsükkel, FOR tsükkel ja WHILE tsükkel katavad tavalised mustrid.

Oracle PL/SQL-tsükkel

Mis on silmused?

Tsüklid võimaldavad programmi teatud osa soovitud arv kordi käivitada. Selles õpetuses vaatleme tsükli kontseptsiooni PL/SQL-is ja juhtimisvoogu tsüklites.

Sissejuhatus silmuste kontseptsiooni

Tsüklite kontseptsioon pakub kodeerimisel järgmisi eeliseid:

  • Koodi korduvkasutatavus.
  • Väiksem koodi suurus.
  • Lihtne juhtimisvoog.
  • Vähendatud keerukus.

Allolev diagramm näitab tualettiping kontseptsioon.

Looping kontseptsioonivoog PL/SQL-is

Ülaltoodud diagrammil kontrollitakse tsükli tingimust ja seni, kuni see on täidetud, käivitub täitmisplokk.

Igas iteratsioonis peaks tsükli loenduri muutuja, mis määrab tsükli tingimuse, muutuma, et juhtseade tsüklist väljuks. Mõnel juhul on see loendur etteantud loenduri suurendamine või vähendamine ning teistel juhtudel on see otsingutingimus, mis jätkab ploki täitmist, kuni see on täidetud.

Silmusjuhtimise avaldused

Enne tsüklite kontseptsiooni õppimist on oluline õppida tsükli juhtimise lauseid. Need laused kontrollivad tsükli sees toimuvat täitmist.

EDASI

See märksõna annab PL/SQL-mootorile juhise, et kui see tsükli sees kohtab CONTINUE-d, jätab see ülejäänud koodi täitmisplokis vahele ja alustab kohe järgmist iteratsiooni. Seda kasutatakse peamiselt siis, kui tsükli sees olev kood tuleks teatud iteratsiooniväärtuste korral vahele jätta.

VÄLJU / VÄLJU MILLAL

See märksõna annab PL/SQL-mootorile käsu koheselt praegusest tsüklist väljuda. Pesastatud tsüklis väljub sisemise tsükli EXIT ainult sisemisest tsüklist, mitte välimisest tsüklist. 'EXIT WHEN' järgneb avaldis, mis annab Boole'i ​​tulemuse; kui tulemus on TRUE, siis juhtimine väljub.

GOTO

See lause annab juhtimise üle märgistatud lausele („GOTO ;“). Sellel on järgmised piirangud:

  • Juhtimise üleandmist saab teha ainult alamprogrammide sees.
  • Juhtimise üleandmist erandite käsitlemise osast täitmisosale ei saa teha.

Selle lause kasutamine pole soovitatav, välja arvatud juhul, kui alternatiivi pole, kuna koodikontroll tracKontroll muutub väga keeruliseks, kui see kandub ühelt osapoolelt teisele.

Silmuse tüübid PL/SQL-is

PL / SQL pakub järgmist kolme tüüpi silmuseid:

Allolev tabel võrdleb neid kolme enne põhitsükli üksikasjalikku käsitlemist.

Silmus Väljumiskriteeriumid Parim kasutada siis, kui
Põhiline tsükkel Selgesõnaline VÄLJASÕIT kvartalis Väljumine ei põhine fikseeritud arvul ega tingimusel.
FOR silmus Loendur jõuab oma vahemiku lõppu Iteratsioonide arv on ette teada
WHILE-tsükkel Tingimus muutub vääraks Tsükkel peaks töötama seni, kuni tingimus kehtib

Silmuse põhilause

See on PL/SQL-i lihtsaim tsükli struktuur. Täitmisplokk algab märksõnaga 'LOOP' ja lõpeb märksõnaga 'END LOOP'. Väljumistingimus tuleks anda täitmisploki sees, et juhtimine tsüklist väljuks, ja märksõna EXIT tuleb anda selgesõnaliselt.

PL/SQL-i põhiline tsükli struktuur

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

Süntaksi selgitus:

  • Märksõna „LOOP” tähistab tsükli algust ja „END LOOP” tähistab lõppu.
  • Täitmisplokk sisaldab kogu käivitatavat koodi, sealhulgas EXIT-tingimust.
  • Täitmisosa võib sisaldada mis tahes käivitatavat lauset.

Märge: Lihtne tsüklilause ilma EXIT märksõnata on lõpmatu tsükkel, mis ei peatu kunagi.

Näide 1: Selles näites prindime numbrid 1-st 5-ni, kasutades lihtsat tsüklilauset.

Põhiline tsükli printimine numbritega 1 kuni 5

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

Code Selgitus:

  • Code rida 2: Muutuja 'a' deklareerimine väärtusena 'NUMBER' ja selle initsialiseerimine väärtusega '1'.
  • Code rida 4: Lause „Programm käivitatud” printimine.
  • Code rida 5: Märksõna „LOOP” tähistab tsükli algust.
  • Code rida 6: Prindib 'a' väärtuse.
  • Code rida 7: Suurendab 'a' väärtust 1 võrra.
  • Code rida 8: Kontrollib, kas 'a' väärtus on suurem kui 5.
  • Code rida 9: Märksõna 'END LOOP' tähistab täitmisploki lõppu.
  • Ridade 6 kuni 8 täitmine jätkub seni, kuni 'a' jõuab arvuni 6, mille järel tingimus tagastab väärtuse TRUE ja juhtimine väljub tsüklist.
  • Code rida 10: Avalduse „Programm lõpetatud” printimine.

Silmuste märgistamine

PL/SQL-is saab tsükleid märgistada. Märgistus peaks olema "<<" ja ">>" vahel. Tsüklite märgistamine, eriti pesastatud tsüklite puhul, annab parema loetavuse. Märgise saab anda EXIT-käsuga, et väljuda sellest konkreetsest tsüklist, nii et juhtimine saab pesastatud struktuuri välimisest tsüklist otse väljuda, andes EXIT-käsu ja seejärel välise tsükli sildi.

Märgistatud pesastatud tsükli struktuur

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

Süntaksi selgitus:

  • Välimises silmuses on sees veel üks silmus.
  • '< >' ja '< >' on nende tsüklite sildid.

Näide 1: Selles näites trükime numbreid alates 1-st, kasutades lihtsat tsüklilauset. Iga arv trükitakse nii mitu korda kui on selle väärtus. Jada ülempiir on deklaratsiooniosas fikseeritud. Selle saavutamiseks kasutame siltide kontseptsiooni.

Märgistatud tsükli näide 1. osaMärgistatud tsükli näide 2. osa

DECLARE
a NUMBER:= 0;
b NUMBER;
upper_limit NUMBER := 4;
BEGIN
dbms_output.put_line('Program started.');
<<outer_loop>>
LOOP
a:= a+1;
b:= 1;
<<inner_loop>>
LOOP
EXIT outer_loop WHEN a > upper_limit;
dbms_output.put_line(a);
b:= b+1;
EXIT inner_loop WHEN b>a;
END LOOP;
END LOOP;
dbms_output.put_line('Program completed.');
END;
/

Code Selgitus:

  • Code rida 2-3: Muutujate 'a' ja 'b' deklareerimine andmetüübina 'NUMBER'.
  • Code rida 4: Muutuja 'upper_limit' deklareerimine väärtusega 'NUMBER' väärtusega '4'.
  • Code rida 6: Lause „Programm käivitatud” printimine.
  • Code rida 7: Välimine tsükkel on tähistatud kui „väline_tsükkel”.
  • Code rida 9: 'a' väärtust suurendatakse 1 võrra.
  • Code rida 11: Sisemine tsükkel on tähistatud kui „inner_loop“.
  • Code rida 13: EXIT-tingimus, mis kontrollib, kas 'a' on suurem kui 'upper_limit' väärtus. Kui ei, siis läheb edasi; vastasel juhul väljub otse välimisest tsüklist.
  • Code rida 14: 'b' väärtuse trükkimine.
  • Code rida 15: Suurendab 'b' väärtust 1 võrra.
  • Code rida 16: EXIT-tingimus, mis kontrollib, kas 'b' on suurem kui 'a'. Kui jah, siis väljub see sisemisest tsüklist.
  • Code rida 19: Avalduse „Programm lõpetatud” printimine.

KKK

EXIT lahkub tsüklist tingimusteta. EXIT WHEN lahkub sellest ainult siis, kui järgmine Boole'i ​​avaldis on tõene, mis välistab vajaduse eraldi IF-i järele tavalise EXIT-i ümber.

Silt võimaldab sisemise tsükli EXIT-käsul nimega välimisest tsüklist ühe sammuga lahkuda. See muudab ka pesastatud koodi palju lihtsamini loetavaks kui trackuningas lihtsad END LOOP-laused.

Kui plokil puudub EXIT või loendur ei jõua kunagi väljumistingimuseni, siis tsükkel ei lõpe kunagi. Veenduge alati, et loendur liigub EXIT WHEN tingimuse suunas.

Tihti jah. Tehisintellekt suudab trace kas loendur liigub EXIT tingimuse suunas ja hoiatab, kui tsüklil pole saavutatavat väljundit, kuigi andmetest sõltuv väljund vajab kinnitamiseks ikkagi testimist.

CONTINUE jätab vahele ülejäänud praeguse iteratsiooni ja hüppab järgmise juurde. See on kasulik, kui teatud väärtusi tuleks ignoreerida ilma tsüklist täielikult lahkumata.

Võta see postitus kokku järgmiselt: