pg_execute

Name

pg_execute -- 在结果上发送一个查询和可选的循环

Synopsis

pg_execute [-array arrayVar] [-oid oidVar] dbHandle queryString [queryProcedure]

输入

[-array arrayVar]

声明一个数组变量的名字,结果元组存储在那里,并且以字段名为索引. 如果queryString不是一个 SELECT 语句则被忽略.对于 SELECT 语句,如果没有使用这个选项,那么结果元组将以独立的变量形式存储, 这些变量名是根据结果中的字段名命名的.

[-oid oidVar]

声明保存 INSERT 语句生成的 OID 的变量的名字.

dbHandle

声明一个有效的数据库句柄.

queryString

声明一个有效的 SQL 查询.

[queryProcedure]

为一个 SELECT 语句的每个结果元组执行的可选命令.

输出

ntuples

查询影响的元组数量或者返回的元组数量.

描述

pg_executePostgreSQL后端提交一个查询.

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

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

queryProcedure 可以使用 Tcl breakcontinue,和 return 命令,这些命令的行为和平时一样. 请注意如果 queryProcedure 执行类 returnpg_execute 并不返回 ntuples

pg_execute 是一个新函数,它提供了 pg_select 的特性的一个超集,并且可以在 许多不需要结果句柄的场合替换 pg_exec

对于后端错误,pg_execute 将抛出一个 Tcl 错误并且返回两个元素列表.第一个元素是一个错误代码, 比如 PGRES_FATAL_ERROR,第二个元素是 后端错误文本.对那些更严重的错误,比如和后端通讯错, pg_execute 将抛出一个 Tcl 错误并只返回错误信息文本.

用法

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

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

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

    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"