FETCH
使用游标从查询中检索行。
概要
FETCH [ forward_direction { FROM | IN } ]
cursor_name
其中forward_direction可以为空或以下之一:
NEXT
FIRST
LAST
ABSOLUTE count
RELATIVE count
count
ALL
FORWARD
FORWARD count
FORWARD ALL
描述
FETCH
使用先前创建的游标检索行。
Note: 本页在SQL命令级别描述游标的用法。 如果试图在PL/pgSQL函数中使用游标,则规则是不同的。 参见Greenplum PL/pgSQL过程语言。
游标具有关联的位置,该位置由FETCH
使用。
光标位置可以在查询结果的第一行之前,结果的任何特定行上,或者在结果的最后一行之后。
创建后,光标将位于第一行之前。
在获取了一些行之后,将光标定位在最近检索到的行上。
如果FETCH
在可用行的末尾运行,则光标将位于最后一行之后。
FETCH ALL
将始终使光标位于最后一行之后。
NEXT
,FIRST
,LAST
,ABSOLUTE
,
RELATIVE
形式在适当移动光标后获取单行。
如果没有这样的行,则返回空结果,并且光标将视情况放在第一行之前或最后一行之后。
使用FORWARD
的表单将检索指示的向前行的行数,将光标留在最后返回的行上(如果计数超过可用行数,则在所有行之后)。
请注意,由于不支持可滚动光标,因此无法在Greenplum数据库中后向移动光标位置。
您只能使用FETCH
向前移动光标。
RELATIVE 0
和FORWARD 0
在不移动光标的情况下请求获取当前行,即重新获取最近获取的行。
除非光标位于第一行之前或最后一行之后,否则此操作将成功,在这种情况下不会返回任何行。
输出
成功完成后,FETCH
命令将返回以下形式的命令标签:
FETCH count
该计数是获取的行数(可能为零)。
请注意,在psql
中,实际上不会显示command标记,因为psql
只是显示提取的行。
参数
forward_direction
定义获取方向和要获取的行数。Greenplum数据库中仅允许前向提取。可以是以下之一:
NEXT
获取下一行。如果省略了方向,则为默认设置。
FIRST
提取查询的第一行(与ABSOLUTE 1
相同)。
仅当它是使用此光标的第一个FETCH
操作时才允许。
LAST
获取查询的最后一行(与ABSOLUTE -1
相同)。
ABSOLUTE count
获取查询的指定行。 如果计数超出范围,则在最后一行之后定位。 只有在被指定了count的行向前移动游标位置才能使用。
RELATIVE count
在当前光标位置之前获取查询count行的指定行。
RELATIVE 0
重新获取当前行(如果有)。
仅当count向前移动光标位置时才允许。
count
获取下一个count行数(与FORWARD count
相同)。
ALL
提取所有剩余的行(与FORWARD ALL
相同)。
FORWARD
获取下一行(与NEXT
相同)。
FORWARD count
获取下一个count行数。
FORWARD 0
重新获取当前行。
FORWARD ALL 提取所有剩余的行。
cursor_name
打开的游标的名称。
注解
Greenplum数据库不支持可滚动光标,因此只能使用FETCH
向前移动光标位置。
ABSOLUTE
获取并不比通过相对移动导航到所需行更快:底层实现无论如何都必须遍历所有中间行。
DECLARE
用于定义游标。使用MOVE
更改光标位置而不检索数据。
示例
-- 开始事务:
BEGIN;
-- 设置游标:
DECLARE mycursor CURSOR FOR SELECT * FROM films;
-- 获取游标mycursor
中的前5行:
FETCH FORWARD 5 FROM mycursor;
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
-- 关闭游标并提交事务:
CLOSE mycursor;
COMMIT;
在c_films
光标当前位置的行中更改表films
的kind
列:
UPDATE films SET kind = 'Dramatic' WHERE CURRENT OF c_films;
兼容性
SQL标准仅允许在嵌入式SQL和模块中使用游标。 Greenplum数据库允许以交互方式使用游标。
这里描述的FETCH
的变量将数据作为SELECT
结果返回,而不是将其放在主机变量中。
除此之外,FETCH
与SQL标准完全向上兼容。
涉及FORWARD
的FETCH
形式以及其中隐含FORWARD
的FETCH count
和FETCH ALL
形式都是Greenplum数据库扩展。
不支持BACKWARD
。
SQL标准只允许在游标名称之前使用FROM
。
使用IN
或完全不使用它们的选项是扩展。
另见
[DECLARE](DECLARE.html#topic1)
,
[CLOSE](CLOSE.html#topic1)
,
[MOVE](MOVE.html#topic1)
Parent topic: SQL Command Reference