使用游标从一个查询中获取数据
概要
FETCH [ forward direction { FROM | IN }] | I cursorname |
where forward_direction can be empty or one of: |
|
NEXT FIRST LAST ABSOLUTE count RELATIVE count count ALL FORWARD FORWARD count FORWARD ALL
|
描述
FETCH使用先前创建的游标检索行。
游标具有相关位置,由FETCH使用。光标位置可以在查询结果的第一行之前,在结果的任何特定行上或结果的最后一行之后。创建时,光标位于第一行之前。抓取一些行后,光标位于最近检索的行上。如果FETCH运行可用行的末尾,则光标位于最后一行之后。 FETCH ALL将始终将光标置于最后一行之后。
移动光标后,表单NEXT,FIRST,LAST,ABSOLUTE,RELATIVE取出一行。如果没有这样的行,则返回一个空的结果,并且光标位于第一行之前或之后的最后一行。
使用FORWARD的表单检索指示的向前移动的行数,使光标位于最后返回的行(或所有行之后,如果计数超过可用行数)。请注意,由于不支持可滚动光标,因此无法在Greenplum数据库中向后移动光标位置。您只能使用FETCH将光标向前移动到位。
RELATIVE o和FORWARD 0请求获取当前行而不移动光标,即重新获取最近获取的行。这将成功,除非光标位于第一行之前或最后一行之后,否则不会返回任何行。
Outputs
成功完成后,FETCH命令返回表单的命令标签
FETCH count
计数是读取的行数(可能为零)。 请注意,在psql中,命令标签实际上不会显示,因为psql会显示提取的行。
parameter
forward_direction
定义提取方向和要获取的行数。在Greenplum数据库中只允许转发提取。它可以是以下之一:
NEXT
获取下一行。如果忽略方向,则为默认值。
FIRST
获取查询的第一行(与ABSOLUTE 1相同)。只允许使用此游标的第一个FETCH操作。
LAST
获取查询的最后一行(与ABSOLUTE -1相同)。
ABSOLUTE count
获取查询的指定行。如果count超出范围,最后一行的位置。只有当count指定的行向前移动光标位置时才允许。
RELATIVE count
在当前光标位置前面提取查询的指定行。 RELATIVE将重新获取当前行(如果有)。如果允许光标向前移动,才能有此操作。
count
获取下一个计数行数(与FORWARD计数相同)。
ALL
获取所有剩余的行(与FORWARD ALL相同)。
FORWARD
获取下一行(与NEXT相同)
FORWARD count
获取下一个计数行数。 FORWARD 0重新获取当前行。
FORWARD ALL
获取所有剩余的行。
cursorname
打开光标的名称。
Greenplum的数据库不支持滚动游标,所以你只能使用抓取来向前移动光标位置。
ABSOLUTE抓取不会比导航到该行有相对运动速度快:底层的实现必须遍历所有中间的行。
通过游标更新数据还不被Greenplum数据引擎的支持。
DECLARE用于定义一个游标。使用MOVE语句改变游标位置而不检索数据。
示例
-- Start the transaction:
BEGIN;
-- Set up a cursor:
DECLAREmycursor CURSOR FOR SELECT * FROM films;
--Fetch the first 5 rows in the cursormycursor:
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 the cursor and end the transaction:
|
CLOSEmycursor; COMMIT;
兼容性
SQL标准只允许在嵌入式SQL和模块中使用游标。 Greenplum数据库允许光标交互使用。
这里描述的FETCH的变体返回数据,就好像它是SELECT结果,而不是将它放在主机变量中。 除此之外,FETCH与SQL标准完全向上兼容。
包含FORWARD的FETCH形式以及FORWARD隐式的FETCH计数和FETCHALL的形式都是Greenplum数据库扩展。
相关参考
DECLARE, CLOSE, MOVE