Пример использования цикла FOR
Листинг 11.45. Пример использования цикла FOR
CREATE FUNCTION extract_all __titles2 () RETURNS text AS '
DECLARE
-- Объявление переменной для кода темы. sub_id integer;
-- Объявление переменной для хранения списка названий книг.
text_output text = :
-- Объявление переменной для названия темы.
sub_title text;
-- Объявление переменной для хранения записей.
-- полученных при выборке из таблицы books.
row_data booksSSROWTYPE: BEGIN
-- Внешний цикл FOR: тело цикла выполняется до тех пор.
-- пока переменная 1 не станет равна 15. Перебор начинается с 0.
-- Следовательно, тело цикла будет выполнено 16 раз
-- (по одному пля каждой темы).
FOR i IN 0..15 LOOP
-- Получить из таблицы subjects название темы.
-- код которой совпадает со значением переменной 1.
SELECT INTO sub_title subject FROM subjects WHERE id = 1:
-- Присоединить название темы, двоеточие и символ новой строки
-- к переменной text_output.
text_output = text_output || "\n" | sub_title | ":\n";
-- Перебрать все записи таблицы books.
-- у которых код темы совпадает со значением переменной 1.
FOR row_data IN SELECT * FROM books
WHERE subjectjd = i LOOP
-- Присоединить к переменной text_output название книги
-- и символ новой строки.
text_output := text_output || row_data.title || "\n":
END LOOP;
END LOOP:
-- Вернуть список.
RETURN text_output;
END:
' LANGUAGE 'plpgsql':
В листинге 11.46 приведена другая функция, в которой цикл FOR используется для перебора результатов запроса SQL. При каждой итерации цикла FOR в листинге 11.46 содержимое одной из записей запроса к таблице books помещается в переменную row_data, после чего значение поля title присваивается переменной text_output.
Цикл продолжается до тех пор, пока не будет достигнута последняя запись в таблице books. В конце цикла переменная text_output содержит полный список всех книг по теме, код которой был передан в аргументе функции. Работа функции завершается возвращением переменной text_output.