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

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

已结束支持的版本: 7.3 / 7.2 / 7.1 / 7.0 / 6.5 / 6.4
历史版本。 PostgreSQL 6.5 已结束支持。 请参阅 当前版本手册.

SPI_exec

SPI_exec — 创建一个执行计划(解析器+规划器+优化器)并执行查询。

大纲

SPI_exec(query, tcount)

输入

char *query

包含查询计划的字符串

int tcount

要返回的最大元组数

输出

int
→ SPI_OK_EXEC 已正确断开连接时
→ SPI_ERROR_UNCONNECTED 从未连接的过程中调用时
→ SPI_ERROR_ARGUMENT query 为 NULL 或 tcount < 0 时。
→ SPI_ERROR_UNCONNECTED 过程未连接时。
→ SPI_ERROR_COPY 执行 COPY TO/FROM stdin 时。
→ SPI_ERROR_CURSOR 执行 DECLARE/CLOSE CURSOR、FETCH 时。
→ SPI_ERROR_TRANSACTION 执行 BEGIN/ABORT/END 时。
→ SPI_ERROR_OPUNKNOWN 查询类型未知时(这不应发生)。

如果查询执行成功,则会返回下列(非负)值之一:

→ SPI_OK_UTILITY 执行了某个工具命令(例如 CREATE TABLE ...)时
→ SPI_OK_SELECT 执行了 SELECT(但不是 SELECT ... INTO!)时
→ SPI_OK_SELINTO 执行了 SELECT ... INTO 时
→ SPI_OK_INSERT 执行了 INSERT(或 INSERT ... SELECT)时
→ SPI_OK_DELETE 执行了 DELETE 时
→ SPI_OK_UPDATE 执行了 UPDATE 时

描述

SPI_exec 创建一个执行计划(解析器+规划器+优化器),并针对 tcount 个元组执行该查询。

用法

此函数只应从已连接的过程中调用。如果 tcount 为零,则会对查询扫描返回的所有元组执行该查询。使用 tcount > 0 可以限制该查询将要执行的元组数。例如,

SPI_exec ("insert into table select * from table", 5);

最多只允许向表中插入 5 个元组。如果查询执行成功,则会返回一个非负值。

注意

你可以在一个字符串中传递多条查询,查询字符串也可能被 RULE 改写。SPI_exec 返回最后执行的那条查询的结果。

(最后一条)查询实际执行所处理的元组数,会通过全局变量 SPI_processed 返回(返回值不是 → SPI_OK_UTILITY 时)。如果返回了 → SPI_OK_SELECT 且 SPI_processed > 0,则可以使用全局指针 SPITupleTable *SPI_tuptable 访问选出的元组:另外注意,SPI_finish 会释放所有 SPITupleTable 并使它们不可再用!(参见内存管理)。

SPI_exec 可能返回下列(负)值之一:

→ SPI_ERROR_ARGUMENT query 为 NULL 或 tcount < 0 时。
→ SPI_ERROR_UNCONNECTED 过程未连接时。
→ SPI_ERROR_COPY 执行 COPY TO/FROM stdin 时。
→ SPI_ERROR_CURSOR 执行 DECLARE/CLOSE CURSOR、FETCH 时。
→ SPI_ERROR_TRANSACTION 执行 BEGIN/ABORT/END 时。
→ SPI_ERROR_OPUNKNOWN 查询类型未知时(这不应发生)。

算法

SPI_exec 执行以下操作:

•

将你的过程与 SPI 管理器断开连接,并释放该过程自 SPI_connect 以来通过 palloc 所做的全部内存分配。这些分配不能再使用了!参见内存管理。

报告文档问题

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