↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

不受支持的版本: 6.3
历史版本PostgreSQL 6.3 已于 2003 年 3 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本手册首页。

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 所做的全部内存分配。这些分配不能再使用了!参见内存管理。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。