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 错误并只返回错误信息文本。
声明一个数组变量的名字,结果元组存储在那里,并且以字段名为索引。 如果commandString不是一个 SELECT 语句则被忽略。
声明保存 INSERT 语句生成的 OID 的变量的名字.
执行命令的连接句柄
要执行的 SQL 命令。
可选的为每个 SELECT 语句的每个结果元组执行的命令。
下面的例子里,为清晰起见,省略了用 catch 进行的错误检查。
插入一行并且在result_oid里保存 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;"