SPI_execute_with_args — выполнить команду с внешними параметрами
int SPI_execute_with_args(const char *command, intnargs, Oid *argtypes, Datum *values, const char *nulls, boolread_only, longcount)
SPI_execute_with_args выполняет команду, которая может содержать ссылки на внешние параметры. Текст команды
ссылается на параметр как $, причем
вызов определяет типы данных и значения для каждого такого символа.
nread_only и count интерпретируются
так же, как и в SPI_execute.
Основное преимущество этой функции по сравнению с
SPI_execute заключается в том, что значения данных могут быть вставлены в команду без трудоемкого квотирования/экранирования, что значительно снижает риск SQL-инъекций.
Аналогичные результаты могут быть достигнуты с помощью SPI_prepare с последующим вызовом
SPI_execute_plan; однако при использовании этой функции план запроса всегда оптимизируется под конкретные переданные значения параметров. Для однократного выполнения запроса следует предпочесть именно эту функцию. Если одну и ту же команду необходимо выполнить с множеством различных параметров, любой из методов может оказаться быстрее, в зависимости от соотношения затрат на повторное планирование и выгоды от использования специализированных планов.
const char * commandстрока команды
int nargs
количество входных параметров ($1, $2и т. д.)
Oid * argtypes
массив длиной nargs, содержащий
OIDтипов данных параметров
Datum * values
массив длиной nargs, содержащий фактические значения параметров
const char * nulls
массив длиной nargs, описывающий, какие из параметров имеют значение null
Если nulls имеет значение NULL то
SPI_execute_with_args предполагает, что ни один из параметров не равен null. В противном случае каждый элемент массива nulls
должен иметь значение ' ' , если соответствующее значение параметра не равно null, или 'n' , если соответствующее значение параметра равно null. (В последнем случае фактическое значение в соответствующем элементе values не имеет значения.) Обратите внимание, что nulls не является текстовой строкой, а представляет собой просто массив: ему не требуется '\0' символ завершения.
bool read_onlytrue для выполнения в режиме «только чтение»
long count
максимальное количество строк для возврата
или 0 для отсутствия ограничений
Возвращаемое значение такое же, как и для SPI_execute.
SPI_processed и
SPI_tuptable устанавливаются так же, как в
SPI_execute в случае успеха.