PostgreSQL7.0手册-用户手册-19. SQL命令-FETCH

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2009-03-16 13:43:21
FETCH
名称
FETCH — 用游标获取行 

用法
FETCH [ selector ] [ count ] { IN  FROM } cursor
FETCH [ RELATIVE ] [ { [ #  ALL  NEXT  PRIOR ] } ] FROM ] cursor
输入
selector 
selector 定义抓取的方向.它可以是下述之一: 
FORWARD 
  
抓取后面的行.selector 省略时这是缺省值. 
BACKWARD 
抓取前面行. 
RELATIVE 
为 SQL92 兼容设置的多余键字. 
count 
  
count 决定抓取几行.可以是下列之一: 
# 
一个表明抓取几行的整数.注意负整数等效于改变 FORWARD 和 BACKWARD 属性. 
ALL 
检索所有剩余的行. 
NEXT 
等效于声明 count 为 1. 
PRIOR 
等效于声明 count 为 -1. 
cursor 
一个打开的游标的名称. 

输出
FETCH 返回由声明的游标定义的查询的结果.如果查询失败,将返回下面的信息: 
NOTICE: PerformPortalFetch: portal "cursor" not found 
如果 cursor 没有定义,返回此信息.游标必须在一个事务块中定义. 
NOTICE: FETCH/ABSOLUTE not supported, using RELATIVE 
Postgres 不支持游标的绝对定位. 
ERROR: FETCH/RELATIVE at current position is not supported 
SQL92 允许我们用下面语句在"当前位置"不停地检索游标 
FETCH RELATIVE 0 FROM cursor
Postgres 目前不支持这种用法;实际上,零被保留用于检索所有行,等效于声明 ALL 关键字.如果使用 RELATIVE 关键字, Postgres 假设用户试图使用 SQL92 的特性,因而返回此错误.
描述
FETCH 允许用户使用游标检索行.所要检索的行数用 # 声明.如果游标中剩下的行小于 #,那么只有那些可用的抓过来.用关键字 ALL 代替数字将导致游标中所有剩余行被抓过来.记录可以 FORWARD (向前)抓,也可以 BACKWARD (向后)抓.缺省的方向是 FORWARD (向前). 
小技巧: 可以用负数作为行记数,符号等效于颠倒抓取方向关键字(FORWARD 和 BACKWARD).例如, FORWARD -1 等效于 BACKWARD 1.
注意
注意 FORWARD 和 BACKWARD 关键字是 Postgres扩展.SQL92 语法也支持,在此命令的第二种形式中声明.详细的兼容性信息见下面. 
在游标中更新数据还不被 Postgres 支持,因为将游标更新影射回基本表是不太可能的,这一点对 VIEW 更新也一样.因而用户必须显式的使用 UPDATE 命令来更新数据. 

游标只能用于事务内部,因为它们存储的数据跨越了多个用户的查询. 

使用 MOVE 语句改变游标位置.使用 DECLARE 语句定义一个游标.使用 BEGIN,COMMIT,和 ROLLBACK 语句获取更多关于事务的信息.

用法
下面的例子用一个游标跨过一个表。 
-- 建立一个游标:

BEGIN WORK;
DECLARE liahona CURSOR FOR SELECT * FROM films;

-- 抓取头 5 行到游标 liahona 里:
FETCH FORWARD 5 IN liahona;

 code            title           did  date_prod    kind     len
-------+-------------------------+-----+------------+----------+-------
 BL101  The Third Man            101  1949-12-23  Drama     01:44
 BL102  The African Queen        101  1951-08-11  Romantic  01:43
 JL201  Une Femme est une Femme  102  1961-03-12  Romantic  01:25
 P_301  Vertigo                  103  1958-11-14  Action    02:08
 P_302  Becket                   103  1964-02-03  Drama     02:28

-- 抓取前面行:
FETCH BACKWARD 1 IN liahona;

 code   title    did  date_prod   kind    len
-------+---------+-----+------------+--------+-------
 P_301  Vertigo  103  1958-11-14  Action  02:08

-- 关闭游标并提交工作:

CLOSE liahona;
COMMIT WORK;
兼容性
SQL92
注意:非嵌入式游标的使用是 Postgres 扩展.游标的语法和用途与定义与 SQL92里定义的嵌入式用法相似。
SQL92 允许游标在 FETCH 中的绝对定位,并且允许将结果放在显式的变量里. 
FETCH ABSOLUTE #
    FROM cursor
    INTO :variable [, ...]
ABSOLUTE 
游标将放置在写明的绝对的行数的位置上.在 Postgres 中所有的行数都是相对数量,所以这一功能不支持. 
:variable 
目标宿主变量.

Tags:

作者:佚名
分享到: 微信 更多