FETCH
カーソルを使用して行を取得します。カーソルの宣言について詳しくは、「DECLARE」を参照してください。
FETCH は、カーソル内の現在の位置に基づいて行を取得します。カーソルを作成すると、最初の行の前に位置が設定されます。FETCH 後は、最後に取得した行にカーソル位置が設定されます。使用できる最後の行まで FETCH を実行すると (FETCH ALL の後など)、カーソル位置は最後の行の後になります。
FORWARD 0 では、現在の行を取得し、カーソルを移動しません。つまり、最後に取得した行を取得します。カーソル位置が最初の行の前、または最後の行の後の場合、行は返されません。
カーソルの最初の行が取得されると、必要に応じて、結果セット全体がリーダーノード、メモリ内、またはディスク上にマテリアライズされます。大きな結果セットにカーソルを使用すると、パフォーマンスが低下する可能性があるため、可能な限り、別の方法を使用することをお勧めします。詳細については、「カーソルを使用するときのパフォーマンスに関する考慮事項」を参照してください。
詳細については、「DECLARE」、「CLOSE」を参照してください。
構文
FETCH [ NEXT | ALL | {FORWARD [ count | ALL ] } ] FROM cursor
パラメータ
- NEXT
-
次の行を取得します。これがデフォルト値です。
- ALL
-
残りのすべての行を取得します (FORWARD ALL と同じです)。単一ノードクラスターでは、ALL はサポートされません。
- FORWARD [ count | ALL ]
-
次の count の行、または残りのすべての行を取得します。
FORWARD 0
は、現在の行を取得します。単一ノードクラスターでは、数値の最大値は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;