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




