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