pg_execute [-array arrayVar] [-oid oidVar] dbHandle queryString [queryProcedure]
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 进行的错误检查.
插入一行并且在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"