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

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

已结束支持的版本: 7.4 / 7.3
历史版本。 PostgreSQL 7.4 已结束支持。 请参阅 当前版本手册.

pg_execute

pg_execute — 发送一条查询并可选地遍历其结果

大纲

pg_execute ?-array arrayVar? ?-oid oidVar? conn commandString ?procedure?

描述

pg_execute 向 PostgreSQL 服务器提交一条命令。

如果该命令不是 SELECT 语句,则返回被该命令影响的行数。如果该命令是一条 INSERT 语句且只插入了一行,那么在提供了可选的 -oid 参数时,被插入行的 OID 会被存入变量 oidVar。

如果该命令是一条 SELECT 语句,那么对于结果中的每一行,如果提供了 arrayVar 变量,行值就会被存入该变量,并以列名作为数组下标,否则存入以列名命名的变量中,然后如果提供了可选的 procedure,则执行它。(只有当查询将只返回一行时,省略 procedure 才大概是合理的。)返回被选中的行数。

procedure 可以使用 Tcl 命令 break、continue 和 return,其行为符合预期。注意,如果 procedure 执行了 return,那么 pg_execute 不会返回受影响的行数。

pg_execute 是一个较新的函数,它提供了 pg_select 功能的一个超集,并且在许多不需要访问结果句柄的场合可以取代 pg_exec。

对于由服务器处理的错误,pg_execute 会抛出一个 Tcl 错误并返回一个双元素列表。第一个元素是一个错误码,例如 PGRES_FATAL_ERROR,第二个元素是服务器的错误文本。对于更严重的错误,例如无法与服务器通信,pg_execute 会抛出一个 Tcl 错误并只返回错误消息文本。

参数

-array arrayVar

指定一个数组变量的名称,结果行将被存入其中,以列名作为索引。如果 commandString 不是 SELECT 语句,则忽略此参数。

-oid oidVar

指定一个变量的名称,INSERT 语句产生的 OID 将被存入该变量。

conn

要在其上执行命令的连接的句柄。

commandString

要执行的 SQL 命令。

procedure

可选的过程,为 SELECT 语句的每个结果行执行。

返回值

被该命令影响或返回的行数。

示例

在下面的例子中,为了清晰起见,省略了用 catch 进行的错误检查。

插入一行并把 OID 保存到 result_oid 中:

pg_execute -oid result_oid $pgconn "INSERT INTO mytable VALUES (1);"

打印每一行中的列 item 和 value:

pg_execute -array d $pgconn "SELECT item, value FROM mytable;" {
    puts "Item=$d(item) Value=$d(value)"
}

找出最大值和最小值,并把它们存入 $s(max) 和 $s(min):

pg_execute -array s $pgconn "SELECT max(value) AS max, min(value) AS min FROM mytable;"

找出最大值和最小值,并把它们存入 $max 和 $min:

pg_execute $pgconn "SELECT max(value) AS max, min(value) AS min FROM mytable;"

报告文档问题

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