Базы данных. Концепция баз данных, реляционная модель данных, языки SQL и XML. Токмаков Г.П. - 141 стр.

UptoLike

Составители: 

141
Внутри первого цикла
FOR находится другой, вложенный цикл FOR. Он пе-
ребирает все книги в базе данных и отбирает те из них, у которых поле
subject_id совпадает с управляющей переменной исходного цикла (текущим
кодом темы). В листинге 6.38 управляющая переменная
i инициализируется
нулевым значением, поскольку нумерация кодов тем в таблице
subjects начи-
нается с
0.
Листинг 6.38. Пример использования цикла FOR
CREATEFUNCTIONextract_all_titles2()RETURNStextAS'
DECLARE
‐‐Объявлениепеременнойдлякодатемы.
sub_idinteger;
‐‐Объявлениепеременнойдляхранениясписканазванийкниг.
text_outputtext;
‐‐Объявлениепеременнойдляназваниятемы.
sub_titletext;
‐‐Объявлениепеременнойдляхранениязаписей,
‐‐полученныхпривыборкеизтаблицыbooks.
row_databooks%ROWTYPE;
BEGIN
‐‐ВнешнийциклFOR:телоциклавыполняетсядотехпор,
‐‐пока
переменная 1 не станет равна 15. Переборначинаетсяс0.
‐‐Следовательно,телоциклабудетвыполнено16раз
‐‐(поодномуплякаждойтемы).
FORiIN0..15LOOP
‐‐Получитьизтаблицыsubjectsназваниетемы,
‐‐кодкоторойсовпадаетсозначениемпеременной1.
SELECTINTOsub_titlesubjectFROMsubjectsWHEREid=1;
‐‐Присоединить название темы, двоеточие и символ новой строки
‐‐кпеременнойtext_output.
text_output=text_output||"\n"|sub_title|":\n";
‐‐Перебратьвсезаписитаблицыbooks,
‐‐укоторыхкодтемысовпадаетсозначениемпеременнойi.
FORrow_dataINSELECT*FROMbooks
WHEREsubject_id=iLOOP
‐‐Присоединитькпеременнойtext_outputназваниекниги
‐‐исимволновойстроки.
text_output:=text_output||row_data.title||"\n";
ENDLOOP;
ENDLOOP;
‐‐Вернутьсписок.
RETURNtext_output;
END;
'LANGUAGE'plpgsql';
В листинге 6.39 приведена другая функция, в которой цикл FOR использует-
ся для перебора результатов запроса
SQL. При каждой итерации цикла FOR в
листинге 6.39 содержимое одной из записей запроса к таблице
books помещает-
ся в переменную
row_data, после чего значение поля title присваивается пере-
менной
text_output.
Цикл продолжается до тех пор, пока не будет достигнута последняя запись
в таблице
books. В конце цикла переменная text_output содержит полный спи-