FETCH [ direction ] [ count ] { IN | FROM } cursor FETCH [ FORWARD | BACKWARD | RELATIVE ] [ # | ALL | NEXT | PRIOR ] { IN | FROM } cursor
selector は行を取り出す方向を定義します。次のうちの 1 つを使用できます。
後方の行を取り出します。 これは、 selector が省略された場合のデフォルト値です。
前方の行を取り出します。
SQL92 との互換性のためだけの余分な単語です。
count は 何行取り出すのかを決定します。次のうちの 1 つを使用できます。
取り出す行数の指定を行なう符合付き整数です。負の整数値は FORWARD と BACKWARD の意味を切替えることと同じである ことに注意して下さい。
残っている全ての行を取り出します。
引数 count に 1 を指定することと同じです。
引数 count に -1 を指定することと同じです。
開いているカーソルの名前です。
FETCH は指定カーソルによって定義された問い合わ せの結果を返します。問い合わせが失敗した場合には次のメッセージが 返されます。
カーソル が事前に 宣言されていない場合です。カーソルはトランザクションブロック内 で宣言されなければなりません。
Postgres はカーソルの絶対位置指定 をサポートしていません。
SQL92 では
FETCH RELATIVE 0 FROM cursor.という構文を使ってカーソルの "現在位置" から繰り返し データを取り出すことができます。
Postgres では、現在この記述方法を サポートしていません。実際ゼロという値は全ての行を取り 出さなければならないことを示すものとして予約されており、ALL キーワードを指定したことと同じことになります。RELATIVE キーワードが使用された場合、Postgres は、そのユーザが SQL92 の振舞いを意図したものとみ なし、エラーメッセージを返します。
FETCH はユーザがカーソルを使って行を取得 することを認めます。取得される行数は # で指定されます。 もしカーソルに残る行数が # より少ない場合、有効なものだけが取り出されます。 数字の場所を ALL キーワードで代用すると、カーソルの 残りの行全てが取り出されます。FORWARD(前方)にもBACKWARD(後方) にもインスタンスを取り出すことができます。デフォルトの方向は FORWARD です。
Tip: 負の値も行数の指定に使用することができます。負の値は FORWARD キーワードと BACKWARD キーワードの意味を逆にすることと同じで す。例えば、 FORWARD -1 は BACKWARD 1 と同じになります。
FORWARD と BACKWARD キーワードは Postgres の拡張であることに注意して 下さい。また、SQL92 構文も、このコマンドの 2 番目の形式として指定したものでサポート されています。詳細については後述の互換性に関する論点を参照して下さい。
通常、カーソルでの更新をどのように元にしたテーブルに戻すかを決定 することは、VIEW での更新の場合と同様にできませんので、カーソル内 のデータの更新は Postgres でサポート されていません。データを入れ換えるには、明示的に UPDATE コマンド を発行する必要があります。
カーソルが保存しているデータは複数のユーザの問い合わせでも使わ れますので、カーソルはトランザクションの内側でのみ使用できます。
カーソルの位置を変えるためには MOVE を 使います。 DECLARE は カーソルを定義します。トランザクションに関する更に詳しい 情報は BEGIN、 COMMIT そして ROLLBACK を参照して下さい。
] 以下の例はカーソルを使ってテーブルを横断するものです。
-- Set up and use a cursor: BEGIN WORK; DECLARE liahona CURSOR FOR SELECT * FROM films; -- Fetch first 5 rows in the cursor liahona: FETCH FORWARD 5 IN liahona; 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 -- Fetch previous row: FETCH BACKWARD 1 IN liahona; code | title | did | date_prod | kind | len -------+---------+-----+------------+--------+------- P_301 | Vertigo | 103 | 1958-11-14 | Action | 02:08 -- close the cursor and commit work: CLOSE liahona; COMMIT WORK;