SPI_cursor_open

SPI_cursor_open — configura un cursor usando una sentencia creada con SPI_prepare

Synopsis

Portal SPI_cursor_open(const char * name, SPIPlanPtr plan,
                       Datum * values, const char * nulls,
                       bool read_only)

Descripción

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.

Argumentos

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 * values

Un array de valores reales de los parámetros. Debe tener la misma longitud que el número de argumentos de la sentencia.

const char * nulls

Un 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_only

true para una ejecución de solo lectura

Valor de retorno

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.