pętla FOR

pętla FOR jest prawdopodobnie najważniejszą pętlą zaimplementowaną w PL/pgSQL. Użyj pętli theFOR do iteracji bloku instrukcji w zakresie liczb całkowitych, które określisz. Struktura pętli FOR W PL/pgSQL jest podobna do FORloops w innych językach proceduralnych, takich jak C.

w pętli PL / pgSQL FOR najpierw podaje się zmienną całkowitą, aby śledzić iterację pętli, następnie podaje się zakres liczb całkowitych, a na końcu dostarczany jest blok instrukcji. Zmienna całkowita wytworzona do śledzenia iteracji pętli jest niszczona po wyjściu pętli; nie musi być deklarowana w sekcji deklaracji bloku. Poniżej przedstawiono składnię pętli FOR:

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

pętla FOR wykona pojedynczą iterację dla każdej zwiększonej wartości identyfikatora, która znajduje się w zakresie wartości między wyrażeniem 1 i wyrażeniem 2. Wartość identyfikatora zostanie zainicjalizowana na wartość expression1, niezależnie od wcześniejszych ustawień, i będzie zwiększana o jedną iterację. Jeśli podano reverse, identyfikator będzie zmniejszany niż zwiększany.

Uwaga: identyfikator używany do śledzenia iteracji nie musi być deklarowany poza blokiem for, chyba że chcesz mieć dostęp do jego wartości po zakończeniu pętli.

pętla FOR Może być również używana do przełączania wyników zapytania. Thesecond for loop w przykładzie 11-45 pokazuje użycie pętli aFOR do pracy ze zmiennymi RECORD i % ROWTYPE. Składnia pętli FOR przechodząca przez zmienne RECORD i % ROWTYPE jest pokazana w następującej składni:

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

w przykładzie 11-45 funkcja extract_all_titles() służy do wyciągnięcia listy wszystkich tytułów książek, które istnieją w bazie danych, uporządkowanych według tematu. Gdy temat nie ma tytułów książek, wyświetlana jest linia ablank. Lista jest zwracana jako zmienna tekstowa. Pętla FOR jest wykorzystywana w funkcji extract_all_titles () do przechodzenia pomiędzy dostępnymi obiektami według liczby.

Inna pętla FOR jest zagnieżdżona w oryginalnej pętli, aby przechodzić przez dostępne książki i pobierać wszystkie książki z wartościami subject_id, które pasują do zmiennej inicjacji oryginalnej pętli, która reprezentuje bieżący numer ID obiektu, którego funkcja skanuje. W przykładzie 11-45 zmienna iteracji i jest inicjowana na zero, ponieważ pierwszy numer ID podmiotu w naszej tabeli przedmiotów wynosi 0.

przykład 11-46 pokazuje kod innej funkcji, która używa pętli aFOR do iteracji wyników zapytania SQL. Przy każdej iteracji pętli pętla FOR w przykładzie 11-46 umieszcza zawartość wiersza result z zapytania przeciwko tabeli books do zmiennej row_data, a następnie umieszcza wartość pola title wiersza w zmiennej text_output.

pętla kończy się po osiągnięciu ostatniego rekordu w książkach. Na końcu pętli text_output będzie zawierał listę wszystkich tytułów książek, które pasują do numeru ID tematu przypisanego do funkcji. Zmienna text_output jest zwracana na końcu funkcji.

przykład 11-47 pokazuje wyniki funkcji extract_title (), gdy 2, która reprezentuje”Książki Dla Dzieci” w tabeli subject, jest przekazywana jako argument.

zmienna row_data jest zadeklarowana jako % ROWTYPEof tabeli books, ponieważ będzie używana tylko do przechowywania rekordów z tabeli books. Mogliśmy zadeklarować row_data jako aRECORD, aby uzyskać ten sam wynik, ale Typ rekordu powinien być używany, gdy zamierzasz używać zmiennej dla więcej niż tylko wierszy jednej konkretnej tabeli:

row_data RECORD;

funkcja extract_title() zwróci te same wyniki, niezależnie od tego, czy dane wiersza są zadeklarowane jako rekord, czy też są zadeklarowane przy użyciu%ROWTYPE.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.