SPI_cursor_open — configura un cursor usando una sentencia creada con SPI_prepare
Portal SPI_cursor_open(const char *name, SPIPlanPtrplan, Datum *values, const char *nulls, boolread_only)
SPI_cursor_open configura un cursor (internamente,
un portal) que ejecutará una sentencia preparada por
SPI_prepare. Los parámetros tienen el mismo
significado que los parámetros correspondientes de
SPI_execute_plan.
Usar un cursor en lugar de ejecutar la sentencia directamente tiene dos beneficios. Primero, las filas del resultado se pueden recuperar de a pocas a la vez, evitando el desbordamiento de memoria para consultas que devuelven muchas filas. Segundo, un portal puede sobrevivir a la función en C actual (puede, de hecho, vivir hasta el final de la transacción actual). Devolver el nombre del portal al llamador de la función en C proporciona una forma de devolver un conjunto de filas como resultado.
Los datos de los parámetros pasados se copiarán en el portal del cursor, por lo que se pueden liberar mientras el cursor aún exista.
const char * name
nombre del portal, o NULL para permitir que el sistema
seleccione un nombre
SPIPlanPtr plan
sentencia preparada (devuelta por SPI_prepare)
Datum * valuesUn array de valores reales de los parámetros. Debe tener la misma longitud que el número de argumentos de la sentencia.
const char * nullsUn array que describe qué parámetros son nulos. Debe tener la misma longitud que el número de argumentos de la sentencia.
Si nulls es NULL, entonces
SPI_cursor_open asume que ningún parámetro
es nulo. De lo contrario, cada entrada del array nulls
debería ser ' ' si el valor del parámetro correspondiente
no es nulo, o 'n' si el valor del parámetro correspondiente
es nulo. (En este último caso, el valor real en la entrada correspondiente de
values no importa). Tenga en cuenta
que nulls no es una cadena de texto, solo un array:
no necesita un terminador '\0'.
bool read_onlytrue para una ejecución de solo lectura
Puntero al portal que contiene el cursor. Tenga en cuenta que no hay una
convención de retorno de error; cualquier error se reportará a través de elog.