Synopsis
FETCH [
direction
] [
count
] { IN | FROM }
cursor
FETCH [ FORWARD | BACKWARD | RELATIVE ] [
#
| ALL | NEXT | PRIOR ] { IN | FROM }
cursor
输入
-
direction
-
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
-
PostgreSQL
不支持游标的绝对定位.
-
ERROR: FETCH/RELATIVE at current position is not supported
-
SQL92
允许我们用下面语句在"当前位置"不停地检索游标
FETCH RELATIVE 0 FROM
cursor
.
PostgreSQL
目前不支持这种用法;实际上,
零被保留用于检索所有行,
等效于声明 ALL 关键字.如果使用 RELATIVE 关键字,
PostgreSQL
假设用户试图使用
SQL92
的特性,因而返回此错误.
描述
FETCH
允许用户使用游标检索行.所要检索的行数用
#
声明.如果游标中剩下的行小于
#
,
那么只有那些可用的抓过来.
用关键字 ALL 代替数字将导致游标中所有剩余行被抓过来.
记录可以 FORWARD (向前)抓,也可以 BACKWARD (向后)抓.缺省的方向是
FORWARD (向前).
注意:
可以用负数作为行记数,
符号等效于颠倒抓取方向关键字(FORWARD 和 BACKWARD).例如,
FORWARD -1
等效于
BACKWARD 1
.
注意
注意 FORWARD 和 BACKWARD 关键字是
PostgreSQL
扩展.
SQL92
语法也支持,在此命令的第二种形式中声明.
详细的兼容性信息见下面.
在游标中更新数据还不被
PostgreSQL
,
支持,因为将游标更新影射回基本表是不太可能的,
这一点对 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
注意:
非嵌入式游标的使用是
PostgreSQL
扩展.游标的语法和用途与定义与
SQL92
里定义的嵌入式用法相似。
SQL92
允许游标在 FETCH 中的绝对定位,
并且允许将结果放在明确的变量里:
FETCH ABSOLUTE
#
FROM
cursor
INTO :
variable
[, ...]
-
ABSOLUTE
-
游标将放置在写明的绝对的行数的位置上.在
PostgreSQL
中所有的行数都是相对数量,所以这一功能不支持.
-
:
variable
-
目标宿主变量.
|