ここでは、FETCHの構文、パラメーター、および例を紹介します。
説明
FETCHは、以前に作成したカーソルを使用して行を取得します。
カーソルは、FETCHによって使用される関連する位置を有する。 カーソル位置は、クエリ結果の最初の行の前、結果の任意の特定の行の上、または結果の最後の行の後とすることができる。 作成されると、カーソルは最初の行の前に配置されます。 いくつかの行をフェッチした後、カーソルは最後に検索された行に配置されます。 FETCHが利用可能な行の終わりから外れる場合、カーソルは最後の行の後、または逆方向にフェッチする場合は最初の行の前に配置されたままになります。 FETCH ALLまたはFETCH BACKWARD ALLは、カーソルを常に最後の行の後または最初の行の前に配置したままにします。
フォームNEXT、PRIOR、FIRST、LAST、ABSOLUTE、RELATIVEは、カーソルを適切に移動した後に1つの行をフェッチします。 そのような行がない場合、空の結果が返され、カーソルは必要に応じて最初の行の前または最後の行の後に配置されたままになります。
FORWARDおよびBACKWARDを使用するフォームは、指定された数の行を取得し、順方向または逆方向に移動し、カーソルを最後に返された行に配置します (または、カウントが使用可能な行数を超える場合は、すべての行の後 /前) 。
RELATIVE 0、FORWARD 0、およびBACKWARD 0はすべて、カーソルを動かさずに現在の行をフェッチすること、すなわち、最も最近フェッチされた行を再フェッチすることを要求する。 カーソルが最初の行の前または最後の行の後に配置されない限り、これは成功します。この場合、行は返されません。
概要
FETCH [ direction ] [ FROM | IN ] cursor_name
方向は次のいずれかになります。
次へ
前
最初
最後
絶対数
相対的なカウント
集計
すべて
前進
前方カウント
すべてを前進
バックワード
バックワードカウント
バックワードすべて このページでは、SQLコマンドレベルでのカーソルの使用方法について説明します。 PL/pgSQL関数内でカーソルを使用しようとしている場合、ルールは異なります。
パラメーター
direction:directionは、フェッチ方向とフェッチする行数を定義します。 次のいずれかになります。NEXT: 次の行をフェッチします。 これは、directionが省略された場合のデフォルトです。前: 前の行を取得します。FIRST: クエリの最初の行を取得します (ABSOLUTE 1と同じ) 。LAST: クエリの最後の行を取得します (ABSOLUTE -1と同じ) 。ABSOLUTEcount: クエリのcount番目の行、またはcountが負の場合は末尾からabs()番目の行をフェッチします。countが範囲外の場合、最初の行の前、または最後の行の後の位置。特に、最初の行の前のABSOLUTE 0の位置。RELATIVEcount:countの次の行、またはcountが負の場合はabs()の前の行をフェッチする。RELATIVE 0は、もしあれば、現在の行を再フェッチする。count: 次のcount行をフェッチします (FORWARDcountと同じ) 。ALL: 残りのすべての行をフェッチします (FORWARD allと同じ) 。FORWARD: 次の行をフェッチします (nextと同じ) 。FORWARDcount: 次のcount行をフェッチします。FORWARD 0は現在の行を再取得します。FORWARD ALL: 残りのすべての行をフェッチします。BACKWARD: 前の行をフェッチします (priorと同じ) 。BACKWARDcount: 前のcount行をフェッチします (逆方向にスキャンします) 。BACKWARD 0は現在の行を再取得します。BACKWARD ALL: 前のすべての行をフェッチします (逆方向にスキャンします) 。
count:countは符号付きの整数定数で、フェッチする行の位置または数を決定します。FORWARDとBACKWARDの場合、負のカウントを指定することは、FORWARDとBACKWARDの意味を変更することと同じです。cursor_name: 開いているカーソルの名前。
出力
FETCHコマンドが正常に完了すると、
フェッチカウントカウントは、フェッチされた行の数である (おそらくゼロ) 。 inpsqlでは、コマンドタグは実際には表示されません。代わりに、フェッチされた行を表示します。
注
FETCH NEXTまたはFETCH FORWARD以外のFETCHのバリアントを使用する場合は、SCROLLオプションでカーソルを宣言します。 単純なクエリの場合、PolarDBはSCROLLで宣言されていないカーソルからの後方フェッチを許可しますが、この動作には依存しないのが最善です。 カーソルがNO SCROLLで宣言されている場合、後方フェッチは許可されません。
ABSOLUTEフェッチは、相対移動で目的の行に移動するよりも高速ではありません。基礎となる実装は、すべての中間行をトラバースする必要があります。 負の絶対フェッチはさらに悪いことです。最後の行を見つけるためにクエリを最後まで読み取り、そこから逆方向にトラバースする必要があります。 しかし、(FETCH ABSOLUTE 0と同様に) クエリの開始までの巻き戻しは高速である。
DECLAREはカーソルを定義するために使用されます。 データを取得せずにカーソル位置を変更するには、MOVEを使用します。
例
次の例では、カーソルを使用してテーブルをトラバースします。
仕事を始める;
-カーソルを設定する:
DECLARE liahona SCROLL CURSOR FOR SELECT * FROM films;
-カーソルのリアホナの最初の5行をフェッチします。リアオナからのフェッチフォーワード5;
code | title | did | date_prod | kind | len
------- ------------------------- ---------------------------------------------------
BL101 | 第三の男 | 101 | 1949-12-23 | ドラマ | 01:44
BL102 | アフリカの女王 | 101 | 1951-08-11 | ロマンチック | 01:43
JL201 | Une Femme est uneファム | 102 | 1961-03-12 | ロマンチック | 01:25
P_301 | めまい | 103 | 1958-11-14 | アクション | 02:08
P_302 | ベケット | 103 | 1964-02-03 | ドラマ | 02:28
-前の行をフェッチする:
liahonaからのフェッチの前;
code | title | did | date_prod | kind | len
------- -------- -------------------------------------------------
P_301 | めまい | 103 | 1958-11-14 | アクション | 02:08
-カーソルを閉じてトランザクションを終了します。クローズliahona;
COMMITの仕事;