bucla FOR

bucla FOR Este probabil cea mai importantă buclă implementată în PL/pgSQL. Utilizațipentru buclă pentru a itera un bloc de instrucțiuni pe o gamă de numere întregi pe care le specificați. Structura a Pentru Buclă în PL / pgSQL este similară cu FORloops în alte limbaje procedurale, cum ar fi C.

într-un pl/pgSQL pentru buclă este menționată mai întâi o variabilă întreagă, pentru a urmări iterația buclei, apoi este dat intervalul întreg și, în final, este furnizat un bloc de instrucțiuni. Variabila întreagă creată totrack iterația buclei este distrusă odată ce bucla iese; nu trebuie să fie declarată în secțiunea de declararedin bloc. Următoarele arată sintaxa buclei FOR:

 FOR identifier IN expression1 .. expression2 LOOP statement; END LOOP;

bucla FOR va efectua o singură iterație pentru fiecare valoare incrementată a identificatorului care se află în intervalul de valori între expresie1 și expresie2 inclusiv. Valoarea identificatorului va fi inițializată la valoarea expresiei1, indiferent de setările anterioare și va fi incrementată cu câte o iterație. IfREVERSE este specificat, identificator va fi decrementat mai degrabădecât incrementat.

notă: identificatorul utilizat pentru a urmări iterația nu trebuie să fie declarat în afara blocului, cu excepția cazului în care doriți să puteți accesa valoarea acestuia după terminarea buclei.

bucla FOR poate fi, de asemenea, utilizată pentru a parcurge rezultatele unei interogări. Thesecond pentru buclă în exemplul 11-45 demonstrează utilizarea buclei aFOR pentru a lucra cu variabilele RECORD și%ROWTYPE. Sintaxa a Pentru Buclă thatiterates prin înregistrare și %variabile ROWTYPE este arătatăîn următoarea sintaxă:

 FOR { record_variable | %rowtype_variable } IN select_statement LOOP statement; END LOOP;

în exemplul 11-45, funcția extract_all_titles() este utilizată pentru a extrage o listă a tuturor titlurilor de cărți care există în baza de date, organizate după subiect. Când un subiect nu are titluri de carte, se afișează ablank line. Lista este returnată ca variabilă text. A For loop isutilized în cadrul funcției extract_all_titles () pentru a trece prin availablesubjects după număr.

un alt FOR loop este imbricat în bucla originală pentru a parcurge cărțile disponibile și pentru a prelua toate cărțile cu valori subject_id care se potrivesc cu variabila inițială loop ‘ siteration, care reprezintă numărul curent de identificare a subiectului pentru care se scanează funcția. În exemplul 11-45, variabila de iterație i este inițializată la zero, deoarece primul număr de identificare a subiectului din tabelul nostru de subiecți este 0.

exemplul 11-46 arată codul unei alte funcții care utilizează bucla aFOR pentru a itera prin rezultatele unei interogări SQL. Cu fiecare iterație a buclei, bucla FOR din exemplul 11-46 plasează conținutul rândului aresult dintr-o interogare împotriva tabelului cărți în variabila row_data și apoi introduce valoarea câmpului titlu al rândului în variabila text_output.

bucla se termină când se atinge ultima înregistrare din cărți. Până la sfârșitul buclei,text_output va conține o listă cu toate titlurile cărților care se potrivesc cu numărul de identificare al subiectuluitrecut la funcție. Variabila text_output este returnat la sfârșitul thefunction.

exemplul 11-47 arată rezultatele funcției theextract_title() când 2, care reprezintă”cărți pentru copii” în tabelul subiect, este trecut ca argument.

variabila row_data este declarată ca %ROWTYPEof din tabelul cărți, deoarece va fi utilizată numai pentru a ține înregistrări din tabelul Cărți. Am fi putut declara row_data ca aRECORD pentru a realiza același rezultat, dar RECORDtype ar trebui să fie utilizat atunci când aveți de gând să fie folosind variabila pentru mai mult decât rândurile de un anumit tabel:

row_data RECORD;

funcția extract_title() va returna aceleași rezultate dacă datele de rând sunt declarate ca înregistrare sau sunt declarate folosind%ROWTYPE.

Lasă un răspuns

Adresa ta de email nu va fi publicată.