PostgreSQL 中文参考文档
🌐 英文原版 官方 ↗

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)

描述

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 假定没有参数是 空的。 否则, nulls 数组的每个条目在相应参数值非空时应为 ' ',在相应参数值为空时应为 'n'。 (在后一种情况下,相应 values 条目中的实际值无关紧要。) 注意, nulls 不是一个文本字符串,只是一个 数组:它不需要 '\0' 终止符。

bool read_only

true 表示只读执行

long count

要返回的最大行数, 0 表示没有限制

返回值

返回值与 SPI_execute 相同。

成功时, SPI_processed 和 SPI_tuptable 的设置方式与 SPI_execute 相同。