SPI_execute_with_args — ejecuta un comando con parámetros externos (out-of-line)
int SPI_execute_with_args(const char *command, intnargs, Oid *argtypes, Datum *values, const char *nulls, boolread_only, longcount)
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 $, y
la llamada especifica los tipos de datos y los valores para cada uno de esos símbolos.
nread_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.
const char * commandcadena 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_onlytrue para una ejecución de solo lectura
long count
número máximo de filas a devolver,
o 0 para ilimitado
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.