SPI_execute_with_args

SPI_execute_with_args — executa um comando com parâmetros fora de linha

Sinopse

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

Descrição

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 $n, e a chamada especifica os tipos de dados e valores para cada símbolo. Os parâmetros read_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.

Argumentos

const char * command

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

true para execução de leitura-apenas

long count

número máximo de linhas a serem retornadas, ou 0 para sem limite

Valor retornado

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.