4
Объявление и открытие
Не связанные с запросом курсорные переменные
объявляется переменная типа refcursor
конкретный запрос указывается при открытии
Связанные с запросом курсорные переменные
при объявлении указывается запрос (возможно, с параметрами)
при открытии указываются фактические значения параметров
Особенности
значение курсорной переменной — имя курсора
(можно задать явно или сгенерируется автоматически)
переменные PL/pgSQL в запросе становятся неявными параметрами
(значения подставляются при открытии курсора)
запрос предварительно подготавливается
нет в SQL
Как мы видели, в SQL курсор объявлялся и открывался одновременно
командой DECLARE. В PL/pgSQL это два отдельных шага. Кроме того,
для доступа к курсорам используются так называемые курсорные
переменные, имеющие тип refcursor и, фактически, содержащие имя
курсора (причем если не указывать это имя явно, PL/pgSQL сам
позаботится о его уникальности).
Курсорную переменную можно объявить, не связывая ее с конкретным
запросом. Тогда при открытии курсора нужно будет указать запрос.
Другой вариант — уже при объявлении переменной указать запрос,
возможно, с параметрами. Тогда при открытии курсора указываются
только фактические параметры.
Оба способа равноценны; какой использовать — дело вкуса.
И связанные, и несвязанные курсорные переменные
инициализируются только при открытии курсора; в обоих случаях
соответствующий запрос может иметь неявные параметры —
переменные PL/pgSQL.
Напомним, что запрос, открытый с помощью курсора, автоматически
подготавливается.