pg_execute

Name

pg_execute -- 发送一个查询并且在接过上执行可选的循环

Synopsis

pg_execute [-array arrayVar] [-oid oidVar] conn commandString [procedure]

描述

pg_executePostgreSQL后端提交一个命令.

如果该查询不是一个 SELECT 语句, 那么执行该查询并且返回该查询影响的行数目。 如果该查询是一个 INSERT 并且插入了一行, 那么如果我们给出了可选的 -oid 参数, 则插入的元组的 OID 保存在oidVar变量里。

如果查询是一个 SELECT 语句,则执行查询。 对于结果中的每个元组,元组的字段值保存在 arrayVar 变量里 --- 如果提供了该变量,并且使用字段名作为数组索引, 否则在字段名命名的变量里,然后执行可选的 procedure --- 如果有的话。 (省略 procedure 可能只有在查询只返回一个元组的情况下有意义。) 返回选取的元组的数量。

procedure 可以使用 Tcl breakcontinue,和 return 命令,这些命令的行为和平时一样。 请注意如果 procedure 执行了 returnpg_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 进行的错误检查。

插入一行并且在result_oid里保存 OID∶

pg_execute -oid result_oid $pgconn "insert into mytable values (1);"

为每一行打印 itemvalue

    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;"