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.
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.
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.
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.
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ă.





