FETCH
使用游标检索行。有关声明游标的信息,请参阅DECLARE。
FETCH 根据游标中的当前位置检索行。在创建游标时,系统会将它放在第一行的前面。在执行 FETCH 后,系统会将游标放在检索的最后一行上。如果 FETCH 在运行时超出了可用行的结尾,例如跟在 FETCH ALL 后面,则游标会保留在最后一行的后面。
FORWARD 0 会提取当前行而不移动游标;即提取最近提取过的行。如果游标放在第一行的前面或最后一行的后面,则不返回任何行。
在提取游标的第一行时,会在领导节点上、内存中或磁盘上具体化整个结果集(如果需要)。由于将游标用于大型结果集可能会降低性能,因此建议使用备用方法(如果可能)。有关更多信息,请参阅 使用游标时的性能注意事项。
语法
FETCH [ NEXT | ALL | {FORWARD [ count | ALL ] } ] FROM cursor
参数
- NEXT
-
提取下一行。这是默认模式。
- ALL
-
提取所有剩余的行。(与 FORWARD ALL 相同。) 对于单节点集群,不支持 ALL。
- FORWARD [ count | ALL ]
-
提取后面 count 行,或者提取所有剩余的行。
FORWARD 0
提取当前行。对于单节点集群,count 的最大值为1000
。对于单节点集群,不支持 FORWARD ALL。 - cursor
-
新游标的名称。
FETCH 示例
以下示例声明一个名为 LOLLAPALOOZA 的游标,以便为 Lollapalooza 事件选择销售信息,然后使用该游标从结果集中提取行:
-- Begin a transaction begin; -- Declare a cursor declare lollapalooza cursor for select eventname, starttime, pricepaid/qtysold as costperticket, qtysold from sales, event where sales.eventid = event.eventid and eventname='Lollapalooza'; -- Fetch the first 5 rows in the cursor lollapalooza: fetch forward 5 from lollapalooza; eventname | starttime | costperticket | qtysold --------------+---------------------+---------------+--------- Lollapalooza | 2008-05-01 19:00:00 | 92.00000000 | 3 Lollapalooza | 2008-11-15 15:00:00 | 222.00000000 | 2 Lollapalooza | 2008-04-17 15:00:00 | 239.00000000 | 3 Lollapalooza | 2008-04-17 15:00:00 | 239.00000000 | 4 Lollapalooza | 2008-04-17 15:00:00 | 239.00000000 | 1 (5 rows) -- Fetch the next row: fetch next from lollapalooza; eventname | starttime | costperticket | qtysold --------------+---------------------+---------------+--------- Lollapalooza | 2008-10-06 14:00:00 | 114.00000000 | 2 -- Close the cursor and end the transaction: close lollapalooza; commit;