# 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_执行如果成功的话。