On this page
SPI_execute_with_args
SPI_execute_with_args —使用行外参数执行命令
Synopsis
int SPI_execute_with_args(const char *command,
int nargs, Oid *argtypes,
Datum *values, const char *nulls,
bool read_only, long count)
Description
SPI_execute_with_args
执行的命令可能包含对外部提供的参数的引用。命令文本将参数称为$n
,并且调用为每个此类符号指定数据类型和值。 * read_only
和 count
*与SPI_execute
具有相同的解释。
与SPI_execute
相比,此例程的主要优点是可以将数据值插入到命令中,而不必进行繁琐的引号/转义操作,从而大大降低了 SQL 注入攻击的风险。
SPI_prepare
后跟SPI_execute_plan
可以达到类似的结果;但是,使用此功能时,查询计划始终根据提供的特定参数值进行定制。对于一次性查询执行,应该首选此功能。如果要使用许多不同的参数执行同一命令,则根据重新计划的成本与自定义计划的优势,这两种方法可能会更快。
Arguments
const char * command
- command string
int nargs
- Importing 参数的数量(
$1
,$2
等)
- Importing 参数的数量(
Oid * argtypes
- 长度*
nargs
*的数组,其中包含参数的数据类型的 OID
- 长度*
Datum * values
- 一个长度*
nargs
*的数组,其中包含实际参数值
- 一个长度*
const char * nulls
- 长度*
nargs
*的数组,描述哪些参数为空
- 长度*
如果* nulls
为NULL
,则SPI_execute_with_args
假定没有参数为空。否则,如果相应的参数值非空,则 nulls
数组的每个条目应为' '
,如果相应的参数值为空,则应为'n'
。 (在后一种情况下,相应的 values
条目中的实际值无关紧要.)请注意, nulls
*不是文本字符串,而只是数组:它不需要'\0'
终止符。
bool read_only
true
用于只读执行
long count
- 要返回的最大行数,或
0
无限制
- 要返回的最大行数,或
Return Value
返回值与SPI_execute
相同。
如果成功,则将SPI_processed
和SPI_tuptable
设置为SPI_execute
。