大纲
pg_execute ?-arrayarrayVar? ?-oidoidVar?conncommandString?procedure?
描述
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 错误并只返回错误消息文本。
参数
-arrayarrayVar指定一个数组变量的名称,结果行将被存入其中,以列名作为索引。如果
commandString不是SELECT语句,则忽略此参数。-oidoidVar指定一个变量的名称,
INSERT语句产生的 OID 将被存入该变量。conn要在其上执行命令的连接的句柄。
commandString要执行的 SQL 命令。
procedure可选的过程,为
SELECT语句的每个结果行执行。
返回值
被该命令影响或返回的行数。
示例
在下面的例子中,为了清晰起见,省略了用
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;"