SPI_cursor_open — configura um cursor usando uma instrução preparada por
SPI_prepare
Portal SPI_cursor_open(const char *name, SPIPlanPtrplan, Datum *values, const char *nulls, boolread_only)
A função SPI_cursor_open configura um cursor
(internamente, um portal), que executa uma instrução preparada
por SPI_prepare.
Os parâmetros têm os mesmos significados que os parâmetros
correspondentes na função SPI_execute_plan.
Usar um cursor em vez de executar a instrução diretamente traz dois benefícios. Primeiro, as linhas de resultados podem ser recuperadas algumas de cada vez, evitando sobrecarga de memória para consultas que retornam muitas linhas. Em segundo lugar, o portal pode viver para além da função C corrente (pode, de fato, durar até o final da transação corrente). Retornar o nome do portal ao chamador da função C fornece uma maneira de retornar um conjunto de linhas como resultado.
Os dados dos parâmetros passados são copiados para o portal do cursor, para poderem ser liberados enquanto o cursor ainda existir.
const char * name
nome para o portal, ou NULL para permitir que
o sistema selecione o nome
SPIPlanPtr plan
instrução preparada (retornada por SPI_prepare)
Datum * valuesMatriz contendo os valores dos parâmetros. Deve ter o mesmo comprimento que o número de argumentos da instrução.
const char * nullsMatriz descrevendo quais parâmetros são nulos. Deve ter o mesmo comprimento que o número de argumentos da instrução.
Se o parâmetro nulls for NULL,
então a função SPI_cursor_open assume que
nenhum parâmetro é nulo.
Caso contrário, cada entrada na matriz nulls
deverá ser ' ' se o valor do parâmetro
correspondente não for nulo, ou 'n' se o valor
do parâmetro correspondente for nulo.
(Neste último caso, o valor real na entrada correspondente em
values não importa.)
Note que nulls não é uma cadeia de caracteres
de texto, e sim uma matriz:
não há necessidade do terminador '\0'.
bool read_onlytrue para execução de leitura-apenas
Ponteiro para o portal que contém o cursor.
Note não haver convenção de retorno de erro; qualquer erro será
relatado via elog.