返回介绍

I. 教程

II. SQL 语言

III. 服务器管理

IV. 客户端接口

V. 服务器端编程

VI. 参考手册

VII. 内部

VIII. 附录

SPI_prepare

发布于 2019-09-30 03:10:11 字数 1421 浏览 1065 评论 0 收藏 0

函数名

SPI_prepare--为一个命令准备一个规划但不立即执行它

原型

void * 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 同样错误的返回值,例外是在 commandNULL 的时候,或者是 nargs 小于 0 或者 nargs 大于 0 并且 argtypesNULL 的时候会被设置成 SPI_ERROR_ARGUMENT

注意

使用参数有一个缺点:因为规划器不知道将提供给参数的数值,所以,相比普通的带着所有可见常量的命令而言,它可能会做出一个较差的规划选择。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文