for loop

FOR loop er uten tvil den viktigste sløyfen implementert I PL / pgSQL. Bruk theFOR loop til å iterere en setningsblokk over et område med heltall du angir. Strukturen av a for loop I PL/pgSQL ligner FORloops i andre prosessuelle språk, For Eksempel C.

I EN pl / pgSQL for loop er en heltallvariabel angitt først, for å spore iterasjonen av sløyfen, så er heltallet gitt, og til slutt er en setningsblokk gitt. Heltallvariabelen opprettet totrack sløyfens iterasjon er ødelagt når sløyfen går ut; det trenger ikke å bli erklært i deklarasjonsseksjonen av blokken. Følgende viser syntaksen TIL FOR-sløyfen:

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

FOR-sløyfen vil utføre en enkelt iterasjon for hver økt verdi avidentifier som ligger i verdiområdet mellom, og inkludert, uttrykk1 og uttrykk2. Identifikatorverdien initialiseres til verdien ofexpression1, uavhengig av tidligere innstillinger, og økes med en hver iterasjon. Ifreverse er angitt, vil identifikatoren bli dekrementert ratherthenn økes.

Merk: identifikatoren som brukes til å spore iterasjon, trenger ikke å bli erklært utenfor blokken, med mindre du ønsker å få tilgang til verdien etter at sløyfen er fullført.

FOR-løkken kan også brukes til å bla gjennom resultatene av en spørring. Thesecond for loop I Eksempel 11-45 demonstrerer bruke afor loop å arbeide MED POSTEN og % ROWTYPE variabler. Syntaksen til a for loop somtiterates gjennom POSTEN og %ROWTYPE variabler er vist i følgende syntaks:

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

i Eksempel 11-45 brukes extract_all_titles () – funksjonen til å trekke ut en liste over alle boktitler som finnes i databasen, organisert etter emne. Når et emne har ingen boktitler, ablank linje vises. Listen returneres som en tekstvariabel. A for loop isutilized i extract_all_titles () – funksjonen for å bla gjennom availablesubjects etter nummer.

En ANNEN for loop er nestet i den opprinnelige sløyfen for å bla gjennom tilgjengelige bøker og hente alle bøker med subject_id-verdier som samsvarer med den opprinnelige loop ‘ siteration-variabelen, som representerer gjeldende emne-ID-nummer funksjonen skanner etter. I Eksempel 11-45 initialiseres iterasjonsvariabelen i til null fordi det første emnets ID-nummer i fagtabellen er 0.

Eksempel 11-46 viser koden til en annen funksjon som bruker aFOR-løkke til å iterere gjennom resultatene av EN SQL-spørring. Med hver iterasjon av loopthe FOR loop I Eksempel 11-46 plasserer innholdet i aresult-raden fra en spørring mot books-tabellen i row_data-variabelen, og setter deretter verdien av radens tittelfelt inn i thetext_output-variabelen.

sløyfen slutter når den siste posten i bøker er nådd. Ved slutten av loopen vil text_output inneholde en liste over alle boktitler som samsvarer med emnets ID-nummerpassert til funksjonen. Text_output variabelen returneres på slutten av funksjonen.

Eksempel 11-47 viser resultatene avextract_title () – funksjonen når 2, som representerer «Barnebøker» i emnetabellen, sendes som et argument.

variabelen row_data deklareres som en %ROWTYPEof books-tabellen fordi den bare brukes til å holde poster fra thebooks-tabellen. Vi kunne ha erklært row_data som aRECORD for å oppnå det samme resultatet, men RECORDtype skal brukes når du skal bruke variabelen for mer enn bare radene i ett bestemt bord:

row_data RECORD;

extract_title () – funksjonen returnerer de samme resultatene om raddata er deklarert SOM POST, eller deklareres ved hjelp av%ROWTYPE.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert.