↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发中的版本: 19 / 20devel
已结束支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1 / 7.0 / 6.5 / 6.4
历史版本。 PostgreSQL 6.4 已结束支持。 请参阅 当前版本手册.

DECLARE

DECLARE — 定义一个用于表访问的游标

大纲

DECLARE cursor [ BINARY ] [ INSENSITIVE ] [ SCROLL ]
    CURSOR FOR query
    [ FOR { READ ONLY | UPDATE [ OF column [, ...] ] ]
  

输入

cursor

用于后续 FETCH 操作的游标的名称。

BINARY

使游标以二进制而不是文本格式获取数据。

INSENSITIVE

SQL92 关键字,表示从游标检索的数据应不受其他进程或游标的更新的影响。由于 Postgres 中游标操作发生在事务内,情况总是如此。这个关键字没有任何效果。

SCROLL

SQL92 关键字,表示每次 FETCH 操作可以检索多行。由于 Postgres 总是允许这样做,这个关键字没有任何效果。

query

一个提供将由该游标管理的行的 SQL 查询。关于有效参数的更多信息请参阅 SELECT 语句。

READ ONLY

SQL92 关键字,表示游标将以只读模式使用。由于这是 Postgres 中唯一可用的游标访问模式,这个关键字没有任何效果。

UPDATE

SQL92 关键字,表示游标将用于更新表。由于 Postgres 目前不支持游标更新,这个关键字会引发一条信息性错误消息。

column

要更新的列。由于 Postgres 目前不支持游标更新,UPDATE 子句会引发一条信息性错误消息。

输出

SELECT

SELECT 成功运行时返回的消息。

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 扩展。

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.