Цикл FOR
Цикл FOR
Возможно, циклы FOR — самая важная разновидность циклов, реализованных в PL/ pgSQL. Цикл FOR выполняет программный блок для целых чисел из заданного интервала. У циклов FOR в PL/pgSQL существуют аналоги в других процедурных языках программирования (например, С).
Заголовок цикла FOR начинается с объявления целочисленной переменной, управляющей выполнением цикла. Затем указывается интервал принимаемых ею значений, а далее следует блок команд. Управляющая переменная уничтожается сразу же после выхода из цикла, причем ее не нужно объявлять в секции объявлений блока. Синтаксис цикла FOR:
[ «метке» ]
FOR переменная IN [ REVERSE ] выражение! . . выражение? LOOP
команда:
[...]
END LOOP:
Цикл FOR выполняет одну итерацию для каждого значения переменной переменная в интервале, границы которого определяются выражениями выражение! и выражекие2 (включительно). В начале цикла переменная инициализируется значением выражения выражение! и увеличивается на 1 после каждой итерации. Если в заголовке цикла присутствует ключевое слово REVERSE, то переменная не увеличивается, а уменьшается.
Примечание 1
Примечание 1
Управляющую переменную цикла не обязательно объявлять вне блока FOR, если вы не собираетесь работать с ней после завершения цикла.
Циклы FOR также используются для перебора результатов запросов. Пример приведен в листинге 11.45, где цикл FOR работает с переменными RECORD и &ROWTYPE. Синтаксис цикла FOR с перебором записей:
[ «метка» ]
FOR { переменная_record %пврененная_гоы1уре } IN xonaHaa_select LOOP
команда :
[...]
END LOOP:
В листинге 11.45 функция extract_all_titles() получает из базы данных список всех названий книг, упорядоченных по теме. Если по какой-либо теме в базе данных не находится ни одной книги, выводится пустая строка. Список возвращается в виде текстовой переменной. Перебор тем по кодам в функции extract_a1I_tit1es() осуществляется в цикле FOR.
Внутри первого цикла FOR находится другой, вложенный цикл FOR. Он перебирает все книги в базе данных и отбирает те из них, у которых поле subjectj d совпадает с управляющей переменной исходного цикла (текущим кодом темы). В листинге 11.45 управляющая переменная i инициализируется нулевым значением, поскольку нумерация кодов тем в таблице subjects начинается с 0.