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: