SPI_execute_with_args

SPI_execute_with_args — ejecuta un comando con parámetros externos (out-of-line)

Synopsis

int SPI_execute_with_args(const char *command,
                          int nargs, Oid *argtypes,
                          Datum *values, const char *nulls,
                          bool read_only, long count)

Descripción

SPI_execute_with_args ejecuta un comando que puede incluir referencias a parámetros suministrados externamente. El texto del comando se refiere a un parámetro como $n, y la llamada especifica los tipos de datos y los valores para cada uno de esos símbolos. read_only y count tienen la misma interpretación que en SPI_execute.

La principal ventaja de esta rutina en comparación con SPI_execute es que los valores de los datos se pueden insertar en el comando sin tener que realizar un escape/comillado tedioso y, por lo tanto, con mucho menos riesgo de ataques de inyección SQL.

Se pueden lograr resultados similares con SPI_prepare seguido de SPI_execute_plan; sin embargo, al usar esta función, el plan de consulta siempre se personaliza para los valores de parámetros específicos proporcionados. Para la ejecución de una consulta de una sola vez, se debe preferir esta función. Si el mismo comando se va a ejecutar con muchos parámetros diferentes, cualquiera de los dos métodos podría ser más rápido, dependiendo del costo de volver a planificar frente al beneficio de los planes personalizados.

Argumentos

const char * command

cadena de comando

int nargs

número de parámetros de entrada ($1, $2, etc.)

Oid * argtypes

un array de longitud nargs que contiene los OID de los tipos de datos de los parámetros

Datum * values

un array de longitud nargs que contiene los valores reales de los parámetros

const char * nulls

un array de longitud nargs que describe qué parámetros son nulos

Si nulls es NULL, entonces SPI_execute_with_args 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

long count

número máximo de filas a devolver, o 0 para ilimitado

Valor de retorno

El valor de retorno es el mismo que para SPI_execute.

SPI_processed y SPI_tuptable se establecen como en SPI_execute en caso de éxito.