SPI_cursor_open#
SPI_cursor_open
SPI_cursor_open — Настройка курсора с использованием оператора, созданного с помощью функции SPI_prepare
Синтаксис
Portal SPI_cursor_open(const char *name
, SPIPlanPtrplan
, Datum *values
, const char *nulls
, boolread_only
)
Описание
SPI_cursor_open
настраивает курсор (внутренне, портал), который будет выполнять оператор, подготовленный с помощью SPI_prepare
. Параметры имеют те же значения, что и соответствующие параметры SPI_execute_plan
.
Использование курсора вместо прямого выполнения оператора имеет два преимущества. Во-первых, строки результата могут быть извлечены по несколько за раз, что позволяет избежать переполнения памяти для запросов, возвращающих много строк. Во-вторых, портал может прожить дольше текущей функции на языке C (фактически, он может прожить до конца текущей транзакции). Возврат имени портала вызывающей функции на языке C предоставляет способ возвращения набора строк в качестве результата.
Входные данные параметра будут скопированы в портал курсора, поэтому их можно освободить, пока курсор все еще существует.
Аргументы
const char *
name
имя портала или
NULL
для того, чтобы система выбрала имяSPIPlanPtr
plan
подготовленный оператор (возвращаемое функцией
SPI_prepare
)Datum *
values
Массив фактических значений параметров. Должен иметь такую же длину, как и количество аргументов оператора.
const char *
nulls
Массив, описывающий, какие параметры являются нулевыми. Должен иметь такую же длину, как и количество аргументов в операторе.
Если параметр
nulls
равенNULL
, то функцияSPI_cursor_open
предполагает, что ни один из параметров не является NULL. В противном случае, каждый элемент массиваnulls
должен быть равен' '
, если соответствующее значение параметра не является NULL, или'n'
, если соответствующее значение параметра является NULL. (В последнем случае фактическое значение в соответствующей записиvalues
не имеет значения). Обратите внимание, чтоnulls
не является текстовой строкой, а только массивом: он не требует завершающего символа'\0'
.bool
read_only
true
для выполнения только для чтения
Возвращаемое значение
Указатель на портал, содержащий курсор. Обратите внимание, что здесь нет соглашения о возврате ошибки; любая ошибка будет сообщена через функцию elog
.