For loop

FOR loop er uden tvivl den vigtigste loop implementeret i PL/pgscl. Brug thefor loop til at gentage en Sætningsblok over en række heltal, som du angiver. Strukturen af en for loop i PL/pgsl svarer til FORloops på andre proceduremæssige sprog, såsom C.

i en pl/pgsl for loop angives først en heltalsvariabel for at spore iterationen af sløjfen, derefter gives heltalsområdet, og til sidst leveres en Sætningsblok. Heltalsvariablen oprettet tiltrack sløjfens iteration ødelægges, når sløjfen kommer ud; det behøver ikke at blive erklæret i deklarationsafsnittet af blokken. Følgende viser syntaksen for for-sløjfen:

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

for-sløjfen udfører en enkelt iteration for hver øget værdi afidentifikator, som er i intervallet af værdier mellem, og inklusive, udtryk1og Udtryk2. Identifikatorværdien initialiseres til værdien af udtryk1, uanset tidligere indstillinger, og øges med en hver iteration. Hvis omvendt er angivet, vil identifikatoren blive decremented ratherthan incremented.

Bemærk: identifikatoren, der bruges til at spore iteration, behøver ikke at blive erklæret uden for blokken, medmindre du ønsker at kunne få adgang til dens værdi, efter at sløjfen er færdig.

for-sløjfen kan også bruges til at gennemgå resultaterne af en forespørgsel. Thesecond for loop i eksempel 11-45 demonstrerer ved hjælp af aFOR loop til at arbejde med RECORD og%RÆKKETYPE variabler. Syntaksen for en for-sløjfe, der indgår gennem post-og % RÆKKETYPE-variabler, vises i følgende syntaks:

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

i eksempel 11-45 bruges funktionen ekstrakt_all_titles() til at udtrække en liste over alle bogtitler, der findes i databasen, organiseret efter emne. Når et emne har ingen bogtitler, ablank linje vises. Listen returneres som en tekstvariabel. A For loop udnyttes inden for funktionen ekstrakt_all_titles () for at cykle gennem de tilgængelige subjects efter nummer.

en anden for loop er indlejret i den oprindelige loop for at cykle gennem de tilgængelige bøger og hente alle bøger med subject_id-værdier, der matcher den oprindelige loop ‘ siteration-variabel, som repræsenterer det aktuelle emne-ID-nummer, som funktionen scanner efter. I eksempel 11-45 initialiseres iterationsvariablen i til nul, fordi det første emne-ID-nummer i vores fagtabel er 0.

eksempel 11-46 viser koden for en anden funktion, der bruger aFOR loop til at gentage resultaterne af en forespørgsel. Med hver iteration af loopthe for loop i eksempel 11-46 placerer indholdet af aresultrække fra en forespørgsel mod tabellen bøger i variablen række_data, og indsætter derefter værdien af rækkens titelfelt i variablen tekst_output.

sløjfen slutter, når den sidste rekord i bøger er nået. Ved slutningen af sløjfen vil tekst_output indeholde en liste over alle bogtitler,der matcher emne-ID-nummeretpasseret til funktionen. Tekst_output-variablen returneres i slutningen af funktionen.

eksempel 11-47 viser resultaterne afekstrakt_title () – funktionen, når 2, der repræsenterer”børnebøger” i emnetabellen, sendes som et argument.

rækkedatavariablen erklæres som en %Rækketypeaf tabellen bøger, fordi den kun vil blive brugt til at opbevare poster fra tabellen bøger. Vi kunne have erklæret række_data som aRECORD for at opnå det samme resultat, men RECORDtype skal bruges, når du skal bruge variablen til mere end blot rækkerne i en bestemt tabel:

row_data RECORD;

funktionen ekstrakt_title() returnerer de samme resultater, uanset om rækkedata erklæres som post eller erklæres ved hjælp af%RÆKKETYPE.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.