DECLARE cursorname [ BINARY ] [ INSENSITIVE ] [ SCROLL ] CURSOR FOR query [ FOR { READ ONLY | UPDATE [ OF column [, ...] ] ]
この後に FETCH 操作などで使われる、カーソル名。
このカーソルによるデータの取得がテキスト形式ではなく バイナリ形式になります。
カーソルから取り出されたデータが他のプロセスやカーソルによる 更新の影響を受けないことを示す、SQL92 の キーワード。Postgres でのカーソル 操作はトランザクションの内側で行なわれますので、常にこの状態 になっています。このキーワードは何の効果も及ぼしません。
1 つの FETCH 操作によって複数の行のデータを取り出すことがで きることを示す、SQL92 のキーワード。 Postgres では、常にこれは可能です ので、このキーワードは何の効果も及ぼしません。
カーソルによって管理される行を提供する、1 つの SQL 問い合わ せ。有効な引数に関するより詳細については SELECT 文を参照し て下さい。
読み取り専用モードでカーソルが使用されることを示す、 SQL92 のキーワード。これは Postgres における唯一のカーソルの アクセスモードですので、このキーワードは何の効果も及ぼしません。
カーソルがテーブルの更新に使用されることを示す、 SQL92 のキーワード。カーソルによる更新は今 のところ Postgres でサポートされて いませんので、このキーワードはこのことを伝えるエラーメッセー ジを表示します。
更新されるカラム (複数可)。カーソルによる更新は今のところ Postgres でサポートされていませ んので、UPDATE 句はこのことを伝えるエラーメッセージを表示 します。
DECLARE によってユーザは、巨大な問い合わせの中 から一度に少数の行を取り出すことに使用できるカーソルを作成すること ができます。 FETCH を使用 して、カーソルからテキストもしくはバイナリのどちらかの形式でデ ータを返すことができます。
カーソルは通常、ASCII または Postgres バックエンドがどのように構築されたのかに依存する ASCII 以外のコー ディング方式のどちらかのテキスト形式でデータを返します。 データは固有のバイナリ形式で保存されていますので、システムはテキス ト形式を生成するために変換を行なう必要があります。 更にテキスト形式の場合、対応するバイナリ形式よりもそのサイズが大き くなることがよくあります。 情報がテキスト形式で返されると、クライアントアプリケーションは情報 を処理するためにバイナリ形式に変換する必要になることがあります。 BINARY カーソルによって、固有のバイナリ表現でデータを返すことがで きます。
例えば、問い合わせが整数カラムから 1 つの値を返す場合、デフォルト のカーソルでは '1' という文字列を入手することになりますが、バイナ リ形式のカーソルの場合は control-A ('^A') と同一の 4 バイトの値 を入手することになります。
BINARY カーソルは注意して使わなければなりません。 psql のようなユーザアプリケーションは バイナリ形式のカーソルと気づかずにデータはテキスト形式で返される ものとみなしています。
文字列表現はアーキテクチャに依存しませんが、バイナリ表現はマシ ンのアーキテクチャによって異なり、また、 Postgres はバイナリ形式のカーソルか ら返される表現に関する、バイトオーダといった問題に対して何も処 理を行ないません。 ですので、クライアントマシンとサーバマシンで異なる表現 (例えば、 "big-endian" 対 "little-endian") を使用する場合、バイナリ形式で データを返さない方が良いでしょう。 しかし、バイナリ形式のカーソルには、サーバからクライアントへの データ転送の際の変換にかかるオーバヘッドが少なくなるという、多 少の効果があり得ます。
Tip: ASCII 形式でデータを表示するつもりならば、ASCII 形式で結果 を受けとることでクライアント側でのいくつかの処理を省くこ とができます。
カーソルはトランザクション内部でのみ使用可能です。 トランザクションブロックを定義するには、 BEGIN、 COMMIT、 及び、 ROLLBACK を使用して下さい。
SQL92 では、カーソルは埋め込み SQL (ESQL) アプリケーションでのみ使用可能です。 Postgres バックエンドでは、明示的な OPEN cursor 文を実装していません。 カーソルは宣言された時に開いたものとみなされています。 しかし、Postgres 用の埋め込み SQL プリプロセッサである ecpg は、これら DECLARE とOPEN 文を必要とすることを含め、 SQL92 規定をサポートしています。