FETCH [ direction ] [ count ] { IN | FROM } cursor FETCH [ FORWARD | BACKWARD | RELATIVE ] [ # | ALL | NEXT | PRIOR ] { IN | FROM } cursor
selector 定义抓取的方向.它可以是下述之一:
抓取后面的行. selector 省略时这是缺省值.
抓取前面行.
为 SQL92 兼容设置的多余键字.
count 决定抓取几行.可以是下列之一:
一个表明抓取几行的整数. 注意负整数等效于改变 FORWARD 和 BACKWARD 属性.
检索所有剩余的行.
等效于声明 count 为 1.
等效于声明 count 为 -1.
一个打开的游标的名称.
FETCH 返回由声明游标定义的查询结果. 如果查询失败,将返回下面的信息:
如果 cursor 在前面没有定义,返回此信息.游标必须在一个事务块中定义.
Postgres 不支持游标的绝对定位.
SQL92 允许我们用下面语句在"当前位置"不停地检索游标
FETCH RELATIVE 0 FROM cursor.
Postgres 目前不支持这种用法;实际上, 零被保留用于检索所有行, 等效于声明 ALL 关键字.如果使用 RELATIVE 关键字, Postgres 假设用户试图使用 SQL92 的特性,因而返回此错误.
FETCH 允许用户使用游标检索行.所要检索的行数用 # 声明.如果游标中剩下的行小于 #, 那么只有那些可用的抓过来. 用关键字 ALL 代替数字将导致游标中所有剩余行被抓过来. 记录可以 FORWARD (向前)抓,也可以 BACKWARD (向后)抓.缺省的方向是 FORWARD (向前).
注意: 可以用负数作为行记数, 符号等效于颠倒抓取方向关键字(FORWARD 和 BACKWARD).例如, FORWARD -1 等效于 BACKWARD 1.
下面的例子用一个游标跨过一个表。
-- 建立一个游标: 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;