Шифрование и секретность в Linux


Листинг 11 45 Пример использования цикла 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.









Начало  Назад  Вперед