Oracle PL/SQL FOR LOOP cu Exemplu

⚡ Rezumat inteligent

Oracle Bucla FOR din PL/SQL rulează un bloc de cod de un număr cunoscut de ori între o limită inferioară și una superioară. Variabila buclei este declarată implicit și se auto-incrementează, deci nu este necesar un contor manual, iar cuvântul cheie REVERSE permite buclei să contorizeze descrescător.

  • 🔢 Cel mai bun pentru: O buclă FOR se potrivește unui număr de iterații cunoscut, mai degrabă decât unei condiții deschise.
  • 📏 Gama: O limită inferioară și una superioară definesc de câte ori se execută bucla.
  • ⚙️ Contor implicit: Variabila de buclă este declarată automat și se incrementează singură.
  • 🎯 Domeniu de aplicare: Variabila buclei există doar în interiorul buclei.
  • 🔄 VERSO: Adăugarea funcției REVERSE înainte de limita inferioară face numărătoarea inversă a buclei.
  • 🪜 Imbricat: Buclele pot fi imbricate, iar bucla interioară rulează complet pentru fiecare iterație externă.
  • 🚪 Ieșire automată: Bucla se termină automat când variabila părăsește intervalul.

Oracle Bucla For PL/SQL

Ce este o buclă FOR?

Instrucțiunea „FOR LOOP” este cea mai potrivită atunci când doriți să executați cod de un număr cunoscut de ori, mai degrabă decât pe baza unei alte condiții.

În această buclă, sunt specificate o limită inferioară și o limită superioară, iar atâta timp cât variabila buclei se află în acest interval, bucla este executată.

Variabila buclei este auto-incrementală, deci nu este necesară nicio operațiune explicită de incrementare. Variabila buclei nu trebuie declarată, deoarece este declarată implicit.

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

Explicația sintaxei:

  • Cuvântul cheie „FOR” marchează începutul buclei, iar „END LOOP” marchează sfârșitul.
  • Variabila buclei este evaluată de fiecare dată înainte de executarea părții de execuție.
  • Blocul de execuție conține tot codul care trebuie rulat și poate conține orice instrucțiune executabilă.
  • Variabila_loop_variable este declarată implicit în timpul execuției buclei, iar domeniul său de aplicare este doar în interiorul buclei.
  • Când variabila buclei iese din interval, controlul iese din buclă.
  • Bucla poate fi făcută să funcționeze în ordine inversă prin adăugarea cuvântului cheie „REVERSE” înainte de lower_limit.

Exemplu 1: În acest exemplu, afișăm numere de la 1 la 5 folosind o instrucțiune de buclă FOR.

Bucla FOR afișează numerele de la 1 la 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 Explicaţie:

  • Code linia 2: Afișarea instrucțiunii „Program pornit”.
  • Code linia 3: Cuvântul cheie „FOR” marchează începutul buclei și se declară variabila_buclei „a”. Acum aceasta ia valori de la 1 la 5.
  • Code linia 5: Imprimă valoarea lui „a”.
  • Code linia 6: Cuvântul cheie „END LOOP” marchează sfârșitul blocului de execuție.
  • Linia 5 continuă să se execute până când „a” atinge valoarea 6, moment în care condiția eșuează și controlul iese din buclă.
  • Code linia 7: Imprimarea declarației „Program finalizat”.

Bucle imbricate

Instrucțiunile de buclă pot fi, de asemenea, imbricate. Buclele exterioare și interioare pot fi de tipuri diferite. Într-o buclă imbricată, pentru fiecare iterație a buclei exterioare, bucla interioară se execută complet.

Structură de buclă imbricată

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

Explicația sintaxei:

  • Bucla exterioară are încă o buclă în interiorul ei.
  • Buclele pot fi de orice tip, iar funcționalitatea de execuție este aceeași.

Exemplu 1: În acest exemplu, afișăm numere de la 1 la 3 folosind o buclă FOR. Fiecare număr este afișat de atâtea ori câtă valoare are.

Exemplu de buclă FOR imbricată, partea 1

Exemplu de buclă FOR imbricată, partea 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 Explicaţie:

  • Code linia 2: Declararea variabilei „b” ca tip de date „NUMĂR”.
  • Code linia 4: Afișarea instrucțiunii „Program pornit”.
  • Code linia 5: Cuvântul cheie „FOR” marchează începutul buclei și se declară variabila_buclei „a”. Acum aceasta ia valori de la 1 la 3.
  • Code linia 7: Resetarea valorii lui „b” la „1” de fiecare dată.
  • Code linia 8: Interiorul în timp ce bucla verifică starea a>=b.
  • Code linia 10: Tipărește valoarea „a” atâta timp cât condiția de mai sus este îndeplinită.
  • Code linia 14: Imprimarea declarației „Program finalizat”.

Bucla FOR și bucla FOR inversă

În mod implicit, o buclă FOR numără crescător de la limita inferioară la limita superioară. Adăugarea cuvântului cheie REVERSE face ca aceasta să număre descrescător în timp ce mențineping limitele în aceeași ordine. Ambele forme sunt prezentate împreună mai jos, astfel încât diferența este clară.

Formă Antet Ordinea valorilor
Ascendent PENTRU UN ÎN 1 .. 5 1, 2, 3, 4, 5
Descendent PENTRU A ÎN SENS INVERS 1 .. 5 5, 4, 3, 2, 1

Rețineți că, chiar și cu REVERSE, limita inferioară este încă scrisă înaintea limitei superioare; se schimbă doar direcția iterației. Pentru buclele al căror număr nu este cunoscut în avans, buclă de bază este alegerea mai bună.

Întrebări frecvente

Nu. Bucla FOR își declară implicit variabila, iar aceasta există doar în interiorul buclei. Declararea unei variabile cu același nume în afara acesteia nu o afectează pe cea utilizată de buclă.

REVERSE face ca bucla să iterateze de la limita superioară până la limita inferioară. Limitele sunt în continuare scrise de la minim la maxim; doar ordinea în care sunt vizitate valorile este inversată.

Folosește o buclă FOR atunci când numărul de iterații este cunoscut în avans, cum ar fi un interval fix. Folosește o buclă WHILE atunci când bucla ar trebui să continue cât timp o condiție este valabilă și numărătoarea nu este fixă.

Da, când bucla de bază numără pur și simplu între două valori fixe. AI poate înlocui contorul manual și EXIT cu un interval FOR, scurtând codul. Confirmați că limitele corespund cu originalul.

Nu. Variabila buclei este doar pentru citire în interiorul buclei, deci o atribuire a acesteia generează o eroare de compilare. Pentru a modifica fluxul, utilizați o variabilă separată sau ieșiți din buclă cu EXIT.

Rezumați această postare cu: