↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发中的版本: 19 / 20devel
已结束支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4
历史版本。 PostgreSQL 9.0 已结束支持。 2015-10-08. 请参阅 当前版本手册.

SPI_prepare

SPI_prepare — 为命令准备一个计划,但暂不执行

大纲

SPIPlanPtr SPI_prepare(const char * command, int nargs, Oid * argtypes)

描述

SPI_prepare 为指定命令创建并返回一个执行计划,但不执行该命令。该函数只能从已连接的过程调用。

当同一条或相似命令需要反复执行时,只做一次规划可能是有利的。SPI_prepare 把命令字符串转换成一个执行计划,之后可以使用 SPI_execute_plan 反复执行。

预备命令可以通过在普通命令原本应写常量的位置写入参数($1、$2 等)而得到泛化。这些参数的实际值会在调用 SPI_execute_plan 时指定。这样,预备语句就能适用于比无参形式更广泛的场景。

SPI_prepare 返回的计划只能在当前这次过程调用中使用,因为 SPI_finish 会释放为计划分配的内存。但可以使用函数 SPI_saveplan 把计划保存得更久。

参数

const char * command

命令字符串

int nargs

输入参数的数量($1、$2 等)

Oid * argtypes

一个数组指针,它指向的数组包含参数的数据类型的 OID

返回值

SPI_prepare 返回一个指向执行计划的非空指针。发生错误时会返回 NULL,并将 SPI_result 设为 SPI_execute 所使用的那些错误码之一;但如果 command 为 NULL,或者 nargs 小于 0,或者 nargs 大于 0 且 argtypes 为 NULL,则会将其设置为 SPI_ERROR_ARGUMENT。

注解

SPIPlanPtr 在 spi.h 中被声明为指向不透明结构体类型的指针。尝试直接访问其内容并不明智,因为这会让你的代码在 PostgreSQL 后续版本中更容易失效。

使用参数有一个不利之处:由于规划器不知道将为参数提供什么值,它做出的规划选择可能比在所有常量都可见的普通命令下更差。

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.