A FOR hurok

a For hurok vitathatatlanul a legfontosabb hurok a PL/pgSQL-ben. A theFOR hurok segítségével egy utasításblokkot iterálhat a megadott egész számok tartományában. Thestructure a For hurok PL / pgSQL hasonló FORloops más eljárási nyelvek, mint például a C.

egy PL/pgSQL hurok egy egész változó van megadva először, hogy nyomon kövesse az iterationof a hurok, akkor az egész tartományt adott, és végül egy nyilatkozatot blokk biztosított. A hurok iterációjának nyomon követésére létrehozott egész változó megsemmisül, amint a hurok kilép; nem kell deklarálni a blokk deklarációs részében. Az alábbiakban a FOR ciklus szintaxisát mutatjuk be:

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

a FOR ciklus egyetlen iterációt hajt végre minden egyes növekményes értékhezazonosító amely az expresszió közötti értéktartományban van1és kifejezés2. Az azonosító értéke az ofexpression1 értékre lesz inicializálva, függetlenül a korábbi beállításoktól, és minden egyes iterációval eggyel növekszik. Ha fordított van megadva, az azonosító inkább csökken, mint növekszik.

Megjegyzés: Az iteráció nyomon követéséhez használt azonosítót nem kell a for blokkon kívül deklarálni, hacsak nem szeretné elérni az értékét, miután a ciklus befejeződött.

a FOR ciklus arra is használható, hogy végigmenjen a lekérdezés eredményein. A második ciklus a 11-45. példában az aFOR ciklus használatát mutatja be rekord és % ROWTYPE változókkal való munkához. Az A for ciklus szintaxisa, amely a rekord és a %ROWTYPE változókon keresztül történik, a következő szintaxisban jelenik meg:

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

a 11-45.példában az extract_all_titles() függvényt használjuk az adatbázisban létező összes könyvcím listájának kivonására, tárgy szerint rendezve. Ha egy tárgynak nincs könyvcíme,megjelenik az ablank vonal. A lista szöveges változóként kerül visszaadásra. A For hurok isutilized belül extract_all_titles () függvényt, hogy végigmenjen a availablesubjects szám.

egy másik FOR ciklus van beágyazva az eredeti ciklusba, hogy végigmenjen a rendelkezésre álló könyveken, és lekérje az összes olyan könyvet, amelynek subject_id értékei megegyeznek az eredeti loop ‘ siteration változóval, amely a függvény által beolvasott aktuális tárgyazonosító számot jelöli. A 11-45. példában az i iterációs változót nullára inicializáljuk, mert az alanyok táblázatában az első tárgyazonosító szám 0.

a 11-46.példa egy másik függvény kódját mutatja, amely aFOR hurkot használ az SQL lekérdezés eredményeinek iterálására. A loopthe for loop minden egyes iterációjával a 11-46. példában az aresult sor tartalmát a books táblához tartozó lekérdezésből a row_data változóba helyezi, majd beszúrja a sor címmezőjének értékét a thetext_output változóba.

a hurok a könyvek utolsó rekordjának elérésekor ér véget. A ciklus végére a text_output tartalmazza az összes olyan könyvcím listáját, amely megfelel a tárgyazonosító számnakátadott a függvénynek. A text_output változó a függvény végén kerül visszaadásra.

a 11-47. példa aextract_title() függvény eredményeit mutatja, amikor a 2, amely a tárgytáblában a”gyermekkönyveket” képviseli, argumentumként kerül átadásra.

a row_data változó a books tábla %ROWTYPEof-jaként van deklarálva, mert csak a Books tábla rekordjainak tárolására szolgál. Mi lehetett volna nyilvánítani row_data mint aRECORD elérni ugyanazt az eredményt, de a RECORDtype kell használni, ha megy, hogy a változó több, mint a sorok egy adott tábla:

row_data RECORD;

az extract_title() függvény ugyanazokat az eredményeket adja vissza, függetlenül attól, hogy a soradatok rekordként vannak-e bejelentve, vagy a%ROWTYPE használatával vannak deklarálva.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.