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Массив, определяющий, какие параметры имеют значение null. Должен иметь ту же длину, что и количество аргументов оператора.
Если nulls имеет значение NULL то
SPI_cursor_open предполагает, что ни один из параметров не равен null. В противном случае каждый элемент массива nulls
должен иметь значение ' ' , если соответствующее значение параметра не равно null, или 'n' , если соответствующее значение параметра равно null. (В последнем случае фактическое значение в соответствующем элементе values не имеет значения.) Обратите внимание, что nulls не является текстовой строкой, а представляет собой просто массив: ему не требуется '\0' символ завершения.
bool read_onlytrue для выполнения в режиме «только чтение»
Указатель на портал, содержащий курсор. Обратите внимание, что стандартное соглашение о возврате
ошибок отсутствует; о любой ошибке будет сообщено через elog.