本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
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;