↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 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 7.3 已于 2007 年 11 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本。

DECLARE

DECLARE — 定义一个游标

大纲

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

输入

cursorname

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

BINARY

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

INSENSITIVE

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

SCROLL

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

query

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

READ ONLY

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

UPDATE

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

column

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

输出

DECLARE CURSOR

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

WARNING: Closing pre-existing portal "cursorname"

如果在当前事务块中已经声明过 同名游标,就会报告这条消息。之前的定义会被 丢弃。

ERROR: DECLARE CURSOR may only be used in begin/end transaction blocks

如果游标不是在事务块内声明的,就会发生这个错误。

描述

DECLARE允许用户创建游标,游标可用于从较大的查询中一次取出少量行。 游标可以使用FETCH以文本或二进制格式返回数据。

普通游标以文本格式(ASCII 或其他编码方案, 取决于 PostgreSQL 后端的构建方式)返回数据。由于 数据本来就是以二进制格式存储的,系统 必须做一次转换来产生文本格式。此外, 文本格式通常比对应的二进制格式 更大。信息以文本形式返回后,客户端 应用可能需要把它转换为二进制格式 才能处理。 BINARY 游标以本机二进制 表示形式返回数据。

例如,如果一个查询从整数列返回值一, 用默认游标会得到字符串 1,而用二进制游标会得到 一个等于 control-A(^A)的 4 字节值。

使用 BINARY 游标应当小心。诸如 psql 这样的用户应用不识别 二进制游标,并期望数据以 文本格式返回。

字符串表示与体系结构无关,而 二进制表示在不同的机器体系结构之间可能 不同。PostgreSQL 不为 二进制游标解决字节序或表示问题。 因此,如果你的客户端机器和服务器机器使用不同的 表示(例如“big-endian”对 “little-endian”),你大概不想让数据以 二进制格式返回。 不过,二进制游标可能 稍微高效一些,因为服务器到客户端 数据传输中的转换开销更小。

提示

如果你想以 ASCII 显示数据,以 ASCII 取回它会省去客户端 的一些工作。

注解

游标只在事务中可用。使用 BEGIN、 COMMIT 和 ROLLBACK 来定义事务块。

在 SQL92 中,游标只在嵌入式 SQL(ESQL)应用中可用。 PostgreSQL 后端 没有实现显式的 OPEN cursor 语句;游标在声明时即视为 打开。不过,ecpg( PostgreSQL 的 嵌入式 SQL 预处理器)支持 SQL92 的游标约定,包括涉及 DECLARE 和 OPEN 语句的那些。

用法

声明一个游标:

DECLARE liahona CURSOR
    FOR SELECT * FROM films;
   

兼容性

SQL92

SQL92 只允许在嵌入式 SQL 和模块中使用游标。 PostgreSQL 允许交互式地 使用游标。 SQL92 允许嵌入式或模块游标 更新数据库信息。 所有 PostgreSQL 游标都是只读 的。BINARY 关键字是一种 PostgreSQL 扩展。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。