SPI_cursor_open_with_args
SPI_cursor_open_with_args — открывает курсор для запроса с параметрами
Синтаксис
Portal SPI_cursor_open_with_args(const char *name
, const char *command
, intnargs
, Oid *argtypes
, Datum *values
, const char *nulls
, boolread_only
, intcursorOptions
)
Описание
SPI_cursor_open_with_args
открывает курсор (внутри называемый порталом) для выполнения заданного запроса. Большинство параметров имеют тот же смысл, что и соответствующие параметры функций SPI_prepare_cursor
и SPI_cursor_open
.
Для разового выполнения запроса эту функцию следует предпочесть SPI_prepare_cursor
с последующей SPI_cursor_open
. Если же одна и та же команда должна выполняться с самыми разными параметрами, какой вариант окажется быстрее, будет зависеть от стоимости повторного планирования и выигрыша от выбора специализированных планов.
Переданные значения параметров копируются в портал курсора, так что их можно освободить и во время существования курсора.
Аргументы
const char *
name
имя портала, либо
NULL
, чтобы имя выбрала системаconst char *
command
строка команды
int
nargs
число входных параметров (
$1
,$2
и т. д.)Oid *
argtypes
массив размера
nargs
, содержащий OID типов параметровDatum *
values
массив размера
nargs
, содержащий фактические значения параметровconst char *
nulls
массив размера
nargs
, описывающий, в каких параметрах передаётся NULLЕсли в
nulls
передаётсяNULL
,SPI_cursor_open_with_args
считает, что ни один из параметров не равен NULL. В противном случае элемент массиваnulls
должен содержать' '
, если значение соответствующего параметра не NULL, либо'n'
, если это значение — NULL. (В последнем случае значение, переданное в соответствующем элементеvalues
, не учитывается.) Заметьте, чтоnulls
— это не текстовая строка, а просто массив: ноль ('\0'
) в конце не нужен.bool
read_only
true
для режима выполнения «только чтение»int
cursorOptions
битовая маска параметров курсора; 0 выбирает поведение по умолчанию
Возвращаемое значение
Указатель на портал, содержащий курсор. Заметьте, что соглашение о возврате ошибок отсутствует; все ошибки выдаются через elog
.