SPI_execute_with_args#
SPI_execute_with_args
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
выполняет команду, которая может содержать ссылки на внешне предоставленные параметры. Текст команды ссылается на параметр как $
, и вызов указывает типы данных и значения для каждого такого символа. n
read_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
, описывающий, какие параметры являются нулевымиЕсли параметр
nulls
равенNULL
, то функцияSPI_execute_with_args
предполагает, что ни один из параметров не является NULL. В противном случае, каждый элемент массиваnulls
должен быть равен' '
, если соответствующее значение параметра не является NULL, или'n'
, если соответствующее значение параметра является NULL. (В последнем случае фактическое значение в соответствующей записиvalues
не имеет значения). Обратите внимание, чтоnulls
не является текстовой строкой, а только массивом: он не требует завершающего символа'\0'
.bool
read_only
true
для выполнения только для чтенияlong
count
максимальное количество строк для возврата, или
0
для отсутствия ограничений
Возвращаемое значение
Возвращаемое значение такое же, как и для SPI_execute
.
SPI_processed
и
SPI_tuptable
устанавливаются, как и в
SPI_execute
, в случае успешного выполнения.