DECLARE
DECLARE — 定义一个用于表访问的游标
大纲
DECLAREcursor[ BINARY ] [ INSENSITIVE ] [ SCROLL ] CURSOR FORquery[ FOR { READ ONLY | UPDATE [ OFcolumn[, ...] ] ]
输入
cursor用于后续 FETCH 操作的游标的名称。
- BINARY
使游标以二进制而不是文本格式获取数据。
- INSENSITIVE
SQL92 关键字,表示从游标检索的数据应不受其他进程或游标的更新的影响。由于 Postgres 中游标操作发生在事务内,情况总是如此。这个关键字没有任何效果。
- SCROLL
SQL92 关键字,表示每次 FETCH 操作可以检索多行。由于 Postgres 总是允许这样做,这个关键字没有任何效果。
query一个提供将由该游标管理的行的 SQL 查询。关于有效参数的更多信息请参阅 SELECT 语句。
- READ ONLY
SQL92 关键字,表示游标将以只读模式使用。由于这是 Postgres 中唯一可用的游标访问模式,这个关键字没有任何效果。
- UPDATE
SQL92 关键字,表示游标将用于更新表。由于 Postgres 目前不支持游标更新,这个关键字会引发一条信息性错误消息。
column要更新的列。由于 Postgres 目前不支持游标更新,UPDATE 子句会引发一条信息性错误消息。
输出
SELECTSELECT 成功运行时返回的消息。
NOTICE BlankPortalAssignName: portal "cursor" already exists如果
cursor已被声明,就会发生这个错误。ERROR: Named portals may only be used in begin/end transaction blocks如果游标不是在事务块内声明的,就会发生这个错误。
描述
DECLARE 允许用户创建游标,可用于从较大的查询中一次检索少量行。游标可以以文本或二进制格式返回数据。
普通游标以文本格式(ASCII 或其他编码方案,取决于 Postgres 后端的构建方式)返回数据。由于数据本来就是以二进制格式存储的,系统必须做一次转换来产生文本格式。此外,文本格式通常比对应的二进制格式更大。信息以文本形式返回后,客户端应用可能仍需要把它转换为二进制格式才能处理。
BINARY 游标以本机二进制表示形式返回数据。因此二进制游标往往稍微快一些,因为它们的转换开销更小。
例如,如果一个查询从整数列返回值一,用默认游标会得到字符串 '1',而用二进制游标会得到一个等于 control-A('^A')的 4 字节值。
小心
使用 BINARY 游标应当小心。诸如 psql 这样的用户应用不识别二进制游标,并期望数据以文本格式返回。
不过,字符串表示与体系结构无关,而二进制表示在不同的机器体系结构之间可能不同。因此,如果你的客户端机器和服务器机器使用不同的表示(例如 "big-endian" 对 "little-endian"),你大概不想让数据以二进制格式返回。
提示
如果你想以 ASCII 显示数据,以 ASCII 取回它会省去客户端的一些工作。
注解
游标只在事务中可用。
Postgres
没有显式的 OPEN cursor
语句;游标在声明时即视为打开。
注意
在 SQL92 中,游标只在嵌入式应用中可用。ecpg(Postgres 的嵌入式 SQL 预处理器)支持 SQL92 的约定,包括涉及 DECLARE 和 OPEN 语句的那些。
用法
声明一个游标:
DECLARE liahona CURSOR
FOR SELECT * FROM films;
兼容性
SQL92
SQL92 只允许在嵌入式 SQL 和模块中使用游标。Postgres 允许交互式地使用游标。SQL92 允许嵌入式或模块游标更新数据库信息。所有 Postgres 游标都是只读的。BINARY 关键字是一种 Postgres 扩展。