# SPI_执行_和_参数
SPI_执行_和_args — 执行带有行外参数的命令
# 概要
int SPI_execute_with_args(const char *command,
int nargs, Oid *argtypes,
Datum *values, const char *nulls,
bool read_only, long count)
# 描述
SPI_execute_with_args
执行可能包含对外部提供的参数的引用的命令。命令文本将参数称为$*
n*
,并且该调用为每个此类符号指定数据类型和值。*只读
和数数
*有相同的解释SPI_执行
.
与此例程相比,该例程的主要优点SPI_执行
是数据值可以插入到命令中而无需繁琐的引用/转义,因此 SQL 注入攻击的风险要小得多。
类似的结果可以通过SPI_prepare
其次是SPI_execute_plan
;然而,当使用这个函数时,查询计划总是根据所提供的特定参数值进行定制。对于一次性查询执行,应该首选此功能。如果要使用许多不同的参数执行相同的命令,则任何一种方法都可能更快,这取决于重新计划的成本与自定义计划的好处。
# 论据
常量字符 * *
命令*
命令字符串
整数 *
纳尔格斯*
输入参数的数量(1美元
,2美元
, 等等。)
好* *
参数类型*
长度数组*纳尔格斯
*,包含参数的数据类型的OID
基准**
价值观*
长度数组*纳格斯
*,包含实际参数值
常量字符**
空值*
长度数组*纳格斯
*,描述哪些参数为空
如果*空值
是无效的
然后SPI_执行_和_参数
假设没有参数为null。否则空值
数组应该是' '
如果相应的参数值非空,或“不”
如果相应的参数值为空。(在后一种情况下,对应的价值观
输入不重要。)注意空值
*不是文本字符串,只是一个数组:它不需要'\0'
终结者。
布尔*
只读*
符合事实的
用于只读执行
长的*
计数*
要返回的最大行数,或0
无限制
# 返回值
返回值与的相同SPI_执行
.
SPI_加工
和SPI_表
设置为SPI_执行
如果成功的话。