DECLARE

Name

DECLARE  --  テーブルアクセス用のカーソルを定義する。

Synopsis

DECLARE cursor [ BINARY ] [ INSENSITIVE ] [ SCROLL ]
    CURSOR FOR query
    [ FOR { READ ONLY | UPDATE [ OF column [, ...] ] ]
  

入力

cursor

この後に FETCH 操作などで使われる、カーソルの名前。

BINARY

カーソルがテキスト形式ではなくバイナリ形式でデータを取り出す。

INSENSITIVE

カーソルから取り出されたデータが他のプロセスやカーソルによる 更新の影響を受けないことを示す、SQL92 の キーワード。Postgres でのカーソル 操作はトランザクションの内側で行なわれますので、常にこの状態 になっています。このキーワードは効果がありません。

SCROLL

1 つの FETCH 操作によって複数の行のデータを取り出すことがで きることを示す、SQL92 のキーワード。 Postgres では、常にこれは可能です ので、このキーワードは効果がありません。

query

カーソルによって管理される行を提供する、1 つの SQL 問い合わ せ。有効な引数に関するより詳細については SELECT 文を参照し て下さい。

READ ONLY

読み取り専用モードでカーソルが使用されることを示す、 SQL92 のキーワード。これは Postgres における唯一のカーソルの アクセスモードですので、このキーワードは効果がありません。

UPDATE

カーソルがテーブルの更新に使用されることを示す、 SQL92 のキーワード。カーソルによる更新は今 のところ Postgres でサポートされて いませんので、このキーワードはこのことを伝えるエラーメッセー ジを表示します。

column

更新されるカラム(複数可)。カーソルによる更新は今のところ Postgres でサポートされていませ んので、UPDATE 句はこのことを伝えるエラーメッセージを表示 します。

出力

SELECT

SELECT 文の実行が正常に終了した場合に返されるメッセージ。

NOTICE BlankPortalAssignName: portal "cursor" already exists

このエラーは、引数 cursor が既に宣言 されていた場合に発生します。

ERROR: Named portals may only be used in begin/end transaction blocks

このエラーは、カーソルがトランザクションブロック内で宣言され なかった場合に発生します。

説明

DECLARE によってユーザは、巨大な問い合わせの中 から一度に少数の行を取り出すことに使用できるカーソルを作成すること ができます。カーソルはテキストもしくはバイナリのどちらかの形式でデ ータを返すことができます。

カーソルは通常、ASCII または Postgres バックエンドがどのように構築されたのかに依存する ASCII 以外のコー ド化方式のどちらかのテキスト形式でデータを返します。データは固有の バイナリ形式で保存されていますので、システムはテキスト形式を生成す るために変換を行なう必要があります。更にテキスト形式の場合、対応す るバイナリ形式よりもそのサイズが大きくなることがよくあります。情報 がテキスト形式で返されると、クライアントアプリケーションはそれを何 とか取り扱うためにそれをバイナリ形式に変換する必要になることがあり ます。

BINARY カーソルはデータをその固有のバイナリ表現で返します。バイナリ 形式のカーソルは変換のオーバヘッド分処理が少なくなりますので、多少 高速になる傾向があります。

例えば、問い合わせが整数カラムから 1 つの値を返す場合、デフォルト のカーソルでは '1' という文字列を入手することになりますが、バイナ リ形式のカーソルの場合は control-A ('^A')と同一の 4 バイトの値 を入手することになります。

Caution

BINARY カーソルは注意して使わなければなりません。 psql のようなユーザアプリケーションは バイナリ形式のカーソルと気づかずにデータはテキスト形式で返される ものとみなしています。

しかし、文字列表現はアーキテクチャに中立ですが、バイナリ表現はマシ ンのアーキテクチャによって異なります。ですので、クライアントマシン とサーバマシンで異なる表現(例えば、"big-endian" 対 "little-endian" )を使用する場合、多分バイナリ形式でデータを戻そう とは考えないでしょう。

Tip: データを ASCII で表示を行なう場合はデータを ASCII 形式で入手す ることでクライアント側での処理をいくつか省くことができます。

注意

カーソルはトランザクション内部でのみ使用可能です。

Postgres には明示的な OPEN cursor 文がありません。カーソルは宣言され た段階で開かれたものとみなされます。

Note: SQL92 では、カーソルは埋め込みアプリケーショ ンでのみ使用可能です。Postgres にお ける埋め込み SQL プリプロセッサである ecpg は、これらDECLARE とOPEN 文を必 要とすることを含め、SQL92 規定をサポートして います。

使用法

カーソルを宣言します。

DECLARE liahona CURSOR
    FOR SELECT * FROM films;
   

互換性

SQL92

SQL92 では、カーソルを埋め込み SQL 内、及び、モジュール内でのみ使用できます。 Postgres では対話式にカーソルを使うこ とができます。SQL92 では、埋め込みまたはモジュ ール型のカーソルによってデータベースの情報を更新することができま す。全ての Postgres のカーソルは読み取 り専用です。BINARY キーワードは Postgres の拡張です。