SPI_cursor_open#

SPI_cursor_open

SPI_cursor_open

SPI_cursor_open — Настройка курсора с использованием оператора, созданного с помощью функции SPI_prepare

Синтаксис

Portal SPI_cursor_open(const char * name, SPIPlanPtr plan,
                       Datum * values, const char * nulls,
                       bool read_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.