SPI_execute_with_args — executa um comando com parâmetros fora de linha
int SPI_execute_with_args(const char *command, intnargs, Oid *argtypes, Datum *values, const char *nulls, boolread_only, longcount)
A função SPI_execute_with_args executa um comando
que pode incluir referências a parâmetros fornecidos externamente.
O texto do comando refere-se ao parâmetro como
$,
e a chamada especifica os tipos de dados e valores para cada símbolo.
Os parâmetros nread_only e
count têm a mesma interpretação que em
SPI_execute.
A principal vantagem dessa rotina em comparação com
SPI_execute, é poderem ser inseridos os valores
dos dados no comando sem as entediantes delimitações/escapes e,
portanto, com muito menos risco de ataques de injeção de
SQL.
Resultados semelhantes podem ser obtidos com
SPI_prepare seguido por
SPI_execute_plan; entretanto, ao usar esta
função, o plano de consulta é sempre individualizado para os valores
dos parâmetros específicos fornecidos.
Para execução de uma única consulta, deve-se preferir esta função.
Se o mesmo comando for executado com muitos parâmetros diferentes,
qualquer um dos métodos poderá ser mais rápido, dependendo do custo
do replanejamento versus benefício dos planos individualizados.
const char * commandcadeia de caracteres de comando
int nargs
número de parâmetros de entrada ($1, $2, etc.)
Oid * argtypes
matriz de comprimento nargs, contendo os
OIDs dos tipos de dados dos parâmetros
Datum * values
matriz de comprimento nargs, contendo os
valores dos parâmetros
const char * nulls
matriz de comprimento nargs, descrevendo
quais parâmetros são nulos
Se o parâmetro nulls for NULL,
então SPI_execute_with_args irá assumir que
não há parâmetro nulo.
Caso contrário, cada entrada da 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
values correspondente não tem importância.)
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
long count
número máximo de linhas a serem retornadas,
ou 0 para sem limite
O valor retornado é o mesmo que para SPI_execute.
Se a função for bem-sucedida, SPI_processed e
SPI_tuptable serão definidos como em
SPI_execute.