大纲
pg_execute [-arrayarrayVar] [-oidoidVar]dbHandlequeryString[queryProcedure]
输入
- [-array
arrayVar] 指定一个数组变量的名称,结果元组以字段名为索引存入其中。如果
queryString不是 SELECT 语句,则忽略此选项。对 SELECT 语句,如果不使用此选项,结果元组的值将按结果中的字段名存入各个独立的变量。- [-oid
oidVar] 指定一个变量的名称,INSERT 语句的 OID 将存入其中。
-
dbHandle 指定一个有效的数据库句柄。
-
queryString 指定一个有效的 SQL 查询。
- [
queryProcedure] 可选的命令,对 SELECT 语句的每个结果元组执行。
输出
-
ntuples 查询影响或返回的元组数。
描述
pg_execute 向 PostgreSQL 后端提交一个查询。
如果查询不是 SELECT 语句,则执行该查询并返回受查询影响的元组数。如果查询是 INSERT 且只插入了一个元组,则在提供了可选的
-oid 参数时,所插入元组的 OID 会存入
oidVar 变量。
如果查询是 SELECT 语句,则执行该查询。对结果中的每个元组,元组的字段值(如果提供了 arrayVar,则以字段名为数组下标存入其中,否则存入以字段名命名的变量),然后如果提供了可选的 queryProcedure 则执行它。(省略
queryProcedure 大概只在查询将返回单个元组时才有意义。)返回选中的元组数。
queryProcedure 可以使用 Tcl 的
break、continue 和
return 命令,行为与预期一致。注意,如果
queryProcedure 执行了
return,pg_execute 不会返回 ntuples。
pg_execute 是一个较新的函数,提供
pg_select 特性的超集,在许多不需要访问结果句柄的场合可以替代 pg_exec。
对于后端处理的错误,pg_execute 会抛出 Tcl
错误并返回两个元素的列表。第一个元素是诸如
PGRES_FATAL_ERROR 的错误码,第二个元素是后端的错误文本。对于更严重的错误,例如无法与后端通信,pg_execute 会抛出 Tcl 错误并只返回错误消息文本。
用法
在下面的例子中,为清晰起见省略了用 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"