for-slingan

FOR-slingan är utan tvekan den viktigaste slingan som implementeras i PL/pgSQL. Använd theFOR loop för att iterera ett uttalande block över ett antal heltal som du anger. Strukturen för A för loop i PL/pgSQL liknar FORloops på andra procedurspråk, såsom C.

i en PL / pgSQL för loop anges en heltalsvariabel först för att spåra iterationen av slingan, sedan ges heltalsområdet och slutligen tillhandahålls ett uttalande block. Heltalsvariabeln skapad för att spåra slingans iteration förstörs när slingan går ut; det behöver inte deklareras i deklarationssektionen av blocket. Följande visar syntaxen för for-slingan:

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

for-slingan kommer att utföra en enda iteration för varje inkrementerat värde ofidentifierare som ligger i intervallet av värden mellan och med expression1 och expression2. Identifieringsvärdet initieras till värdet avuttryck1, oavsett tidigare inställningar, och ökas med en varje iteration. Omomvändning anges kommer identifieraren att minskas snarareän ökas.

Obs: identifieraren som används för att spåra iteration behöver inte deklareras utanför thefor blocket, om du inte vill kunna komma åt dess värde efter slingan har avslutats.

For loop kan också användas för att bläddra igenom resultaten av en fråga. Thesecond för loop I exempel 11-45 visar att använda aFOR loop för att arbeta med RECORD och%ROWTYPE variabler. Syntaxen för A för loop somterates genom post-och %RADTYPVARIABLER visasi följande syntax:

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

i exempel 11-45 används funktionen extract_all_titles() för attextrahera en lista över alla boktitlar som finns i databasen, organiserade efter ämne. När ett ämne inte har några boktitlar visas ablank line. Listan returneras som en textvariabel. A för loop isutilized inom extract_all_titles () – funktionen för att cykla genom tillgängliga ämnen efter antal.

en annan för loop är kapslad i den ursprungliga slingan för att bläddra igenom tillgängliga böcker och hämta alla böcker med subject_id-värden som matchar den ursprungliga loop ’ siterationsvariabeln, som representerar det aktuella ämnesnummer som funktionen söker efter. I exempel 11-45 initieras iterationsvariabeln i till noll eftersom det första ämnes-ID-numret i vår ämnestabell är 0.

exempel 11-46 visar koden för en annan funktion som använder aFOR loop för att iterera genom resultaten av en SQL-fråga. Med varje iteration av loopthe FOR loop I exempel 11-46 placerar innehållet i aresult row från en fråga mot books-tabellen i row_data-variabeln och sedan in värdet på radens titelfält i thetext_output-variabeln.

slingan slutar när den sista posten i böcker nås. I slutet av slingan kommer text_output att innehålla en lista över alla boktitlar som matchar ämnet ID numberpassed till funktionen. Text_output-variabeln returneras i slutet avfunktionen.

exempel 11-47 visar resultaten av funktionen extract_title() när 2, som representerar”barnböcker” i ämnestabellen, skickas som ett argument.

variabeln row_data deklareras som en %ROWTYPEof tabellen böcker eftersom den endast kommer att användas för att hålla poster från tabellen böcker. Vi kunde ha förklarat row_data som aRECORD för att uppnå samma resultat, men posttypen ska användas när du ska använda variabeln för mer än bara raderna i en specifik tabell:

row_data RECORD;

funktionen extract_title() returnerar samma resultat oavsett om raddata deklareras som post eller deklareras med%ROWTYPE.

Lämna ett svar

Din e-postadress kommer inte publiceras.