FETCH
FETCH — 使用游标从表中检索行
大纲
FETCH [direction] [count] { IN | FROM }cursorFETCH [ FORWARD | BACKWARD | RELATIVE ] [#| ALL | NEXT | PRIOR ] { IN | FROM }cursor
输入
directionselector定义提取方向。它可以是下列之一:- FORWARD
提取下一个(或下一些)行。如果省略
selector,这是默认值。- BACKWARD
提取前一个(或前一些)行。
- RELATIVE
为兼容 SQL92 而存在的噪声词。
countcount决定提取多少行。它可以是下列之一:#一个有符号整数,指定要提取多少行。注意,负整数等价于反转 FORWARD 和 BACKWARD 的方向。
- ALL
检索所有剩余的行。
- NEXT
等价于指定数量
1。- PRIOR
等价于指定数量
-1。
cursor一个已打开游标的名称。
输出
FETCH返回由指定游标定义的查询的结果。如果查询失败,将返回下列消息:
WARNING: PerformPortalFetch: portal "cursor" not found如果
cursor此前未被声明。游标必须在事务块内声明。WARNING: FETCH/ABSOLUTE not supported, using RELATIVEPostgreSQL不支持游标的绝对定位。
ERROR: FETCH/RELATIVE at current position is not supportedSQL92允许使用语法
FETCH RELATIVE 0 FROM
cursor.反复检索游标“当前位置”上的行。
PostgreSQL目前不支持这一概念;实际上,值零被保留用来表示要检索所有行,等价于指定 ALL 关键字。如果使用了 RELATIVE 关键字,PostgreSQL 假定用户想要的是 SQL92行为,并返回这条错误消息。
描述
FETCH允许用户使用游标检索行。检索的行数由
#
指定。如果游标中剩余的行数少于
#,则只提取那些可用的行。用关键字 ALL 代替数字将检索游标中所有剩余的行。可以沿 FORWARD 和 BACKWARD 两个方向提取行。默认方向是 FORWARD。
提示
行数允许指定为负数。负数等价于反转 FORWARD 和 BACKWARD
关键字的方向。例如,FORWARD -1与BACKWARD 1相同。
用法
下面的例子使用游标遍历一个表。
-- Set up and use a cursor: BEGIN WORK; DECLARE liahona CURSOR FOR SELECT * FROM films; -- Fetch first 5 rows in the cursor 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 previous row: FETCH BACKWARD 1 IN liahona;code | title | did | date_prod | kind | len -------+---------+-----+------------+--------+------- P_301 | Vertigo | 103 | 1958-11-14 | Action | 02:08-- close the cursor and commit work: CLOSE liahona; COMMIT WORK;
兼容性
SQL92
注意
游标的非嵌入式使用是PostgreSQL 扩展。这里把游标的语法和用法与SQL92 定义的嵌入式游标形式相比较。
SQL92允许 FETCH 绝对定位游标,并允许把结果放入显式变量:
FETCH ABSOLUTE#FROMcursorINTO :variable[, ...]
- ABSOLUTE
游标应被定位到指定的绝对行号。PostgreSQL 中的所有行号都是相对编号,因此不支持这一能力。
- :
variable 目标主变量。