Oracle PL/SQL LOOP cu Exemplu
⚡ Rezumat inteligent
Buclele PL/SQL execută o secțiune de cod în mod repetat, de un număr dorit de ori. PL/SQL oferă bucle de bază, FOR și WHILE, controlate de CONTINUE, EXIT, EXIT WHEN și GOTO, iar buclele pot fi etichetate pentru a gestiona structurile imbricate în mod curat.
Ce sunt buclele?
Buclele permit ca o anumită parte a codului dintr-un program să fie executată de numărul dorit de ori. În acest tutorial, vom analiza conceptul de buclă în PL/SQL și fluxul de control în bucle.
Introducere în conceptul de bucle
Conceptul de bucle oferă următoarele avantaje în codare:
- Reutilizabilitatea codului.
- Dimensiune redusă a codului.
- Flux ușor de control.
- Complexitate redusă.
Diagrama de mai jos prezintă toaletaping concept.
În diagrama de mai sus, condiția buclei este verificată și, atâta timp cât este îndeplinită, blocul de execuție rulează.
În fiecare iterație, variabila contorului de buclă care decide condiția buclei ar trebui să se modifice pentru ca unitatea de control să iasă din buclă. În unele cazuri, acest contor este un increment sau un decrement pentru un număr predefinit, iar în altele este o condiție de căutare care continuă executarea blocului până când aceasta este satisfăcută.
Declarații de control al buclei
Înainte de a învăța conceptul de buclă, este important să învățăm instrucțiunile de control ale buclei. Aceste instrucțiuni controlează fluxul de execuție în interiorul unei bucle.
CONTINUĂ
Acest cuvânt cheie instruiește motorul PL/SQL ca, ori de câte ori întâlnește comanda CONTINUE în interiorul unei bucle, să sară peste codul rămas din blocul de execuție și să înceapă imediat următoarea iterație. Aceasta se folosește în principal atunci când codul din interiorul buclei trebuie să fie omis pentru anumite valori de iterație.
EXIT / EXIT CÂND
Acest cuvânt cheie instruiește motorul PL/SQL să iasă imediat din bucla curentă. Într-o buclă imbricată, comanda EXIT din bucla interioară iese doar din bucla interioară, nu și din bucla exterioară. „EXIT WHEN” este urmată de o expresie care dă un rezultat boolean; dacă rezultatul este TRUE, controlul iese.
MERGI LA
Această instrucțiune transferă controlul către o instrucțiune etichetată („GOTO ;”). Are următoarele restricții:
- Transferul controlului se poate face numai în cadrul subprogramelor.
- Transferul controlului nu se poate face de la partea de tratare a excepțiilor la partea de execuție.
Utilizarea acestei instrucțiuni nu este recomandată decât dacă nu există alternativă, deoarece sistemul de control al codului tracEficacitatea devine foarte dificilă atunci când controlul este transferat dintr-o parte în alta.
Tipuri de buclă în PL/SQL
PL / SQL oferă următoarele trei tipuri de bucle:
- Instrucțiunea de bază a buclei
- Instrucțiunea pentru buclă
- Instrucțiunea while loop
Tabelul de mai jos compară cele trei înainte ca bucla de bază să fie prezentată în detaliu.
| Buclă | Criteriile de ieșire | Cel mai bine utilizat atunci când |
|---|---|---|
| Bucla de bază | IEȘIRE explicită în bloc | Ieșirea nu se bazează pe un număr fix sau o condiție fixă |
| bucla FOR | Contorul ajunge la sfârșitul intervalului său | Numărul de iterații este cunoscut în avans |
| Bucla WHILE | Condiția devine falsă | Bucla ar trebui să ruleze atât timp cât o condiție este valabilă |
Instrucțiunea de bază a buclei
Aceasta este cea mai simplă structură de buclă din PL/SQL. Blocul de execuție începe cu cuvântul cheie „LOOP” și se termină cu „END LOOP”. Condiția de ieșire trebuie dată în interiorul blocului de execuție, astfel încât controlul să iasă din buclă, iar cuvântul cheie EXIT trebuie dat explicit.
LOOP <execution block starts> <EXIT condition based on developer criteria> <execution_block_ends> END LOOP;
Explicația sintaxei:
- Cuvântul cheie „LOOP” marchează începutul buclei, iar „END LOOP” marchează sfârșitul.
- Blocul de execuție conține tot codul care trebuie rulat, inclusiv condiția EXIT.
- Partea de execuție poate conține orice instrucțiune executabilă.
Notă: O instrucțiune de buclă simplă fără cuvântul cheie EXIT este o buclă infinită care nu se oprește niciodată.
Exemplu 1: În acest exemplu, afișăm numere de la 1 la 5 folosind o instrucțiune de buclă simplă.
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 Explicaţie:
- Code linia 2: Declararea variabilei 'a' ca 'NUMĂR' și inițializarea acesteia cu valoarea '1'.
- Code linia 4: Afișarea instrucțiunii „Program pornit”.
- Code linia 5: Cuvântul cheie „LOOP” marchează începutul buclei.
- Code linia 6: Imprimă valoarea lui „a”.
- Code linia 7: Incrementează valoarea lui „a” cu 1.
- Code linia 8: Verifică dacă valoarea lui „a” este mai mare decât 5.
- Code linia 9: Cuvântul cheie „END LOOP” marchează sfârșitul blocului de execuție.
- Liniile 6-8 continuă să se execute până când 'a' ajunge la 6, moment în care condiția returnează TRUE și controlul iese din buclă.
- Code linia 10: Imprimarea declarației „Program finalizat”.
Etichetarea buclelor
În PL/SQL, buclele pot fi etichetate. Eticheta ar trebui să fie cuprinsă între „<<” și „>>”. Etichetarea buclelor, în special în buclele imbricate, oferă o lizibilitate mai bună. Eticheta poate fi dată într-o comandă EXIT pentru a ieși din bucla respectivă, astfel încât controlerul poate ieși direct din bucla exterioară a unei structuri imbricate prin executarea comenzii EXIT urmată de eticheta buclei exterioare.
<<OUTER_LOOP>> LOOP <execution_block_starts> . <<INNER_LOOP>> LOOP --inner <execution_part> END LOOP; . <execution_block_ends> END LOOP;
Explicația sintaxei:
- Bucla exterioară are încă o buclă în interiorul ei.
- „<” >' și '< >' sunt etichetele acestor bucle.
Exemplu 1: În acest exemplu, afișăm numere începând de la 1 folosind o instrucțiune de buclă simplă. Fiecare număr este afișat de atâtea ori câtă valoare are. Limita superioară a seriei este fixată în partea de declarație. Folosim conceptul de etichetă pentru a realiza acest lucru.
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 Explicaţie:
- Code liniile 2-3: Declararea variabilelor 'a' și 'b' ca tip de date 'NUMBER'.
- Code linia 4: Declararea variabilei „upper_limit” ca „NUMBER” cu valoarea „4”.
- Code linia 6: Afișarea instrucțiunii „Program pornit”.
- Code linia 7: Bucla exterioară este etichetată „bucla_exterioară”.
- Code linia 9: Valoarea lui „a” este incrementată cu 1.
- Code linia 11: Bucla interioară este etichetată „bucla_interioară”.
- Code linia 13: Condiție EXIT care verifică dacă „a” este mai mare decât valoarea „upper_limit”. Dacă nu, merge mai departe; altfel, iese direct din bucla exterioară.
- Code linia 14: Imprimarea valorii lui „b”.
- Code linia 15: Incrementează valoarea lui „b” cu 1.
- Code linia 16: Condiție EXIT care verifică dacă „b” este mai mare decât „a”. Dacă da, iese din bucla interioară.
- Code linia 19: Imprimarea declarației „Program finalizat”.







