ヘッダーをスキップ
Oracle Database PL/SQL言語リファレンス
11g リリース1(11.1)
E05670-03
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

明示カーソル

明示カーソルは、複数行の問合せの実行時にデータベースによって処理情報が格納される名前の付けられていない作業領域に名前を付けます。 作業領域に名前を付けておくと、その情報にアクセスし、問合せの行を個別に処理できます。

構文

cursor_declaration ::=

cursor_declaration
cursor_declaration.gifの説明

cursor_parameter_declaration ::=rowtype ::=

cursor_spec ::=

cursor_spec
cursor_spec.gifの説明

cursor_parameter_declaration ::=rowtype ::=

cursor_body ::=

cursor_body
cursor_body.gifの説明

cursor_parameter_declaration ::=

cursor_parameter_declaration
cursor_param_declaration.gifの説明

expression ::=

rowtype ::=

rowtype
rowtype.gifの説明

キーワードとパラメータの説明

cursor_name

現行の有効範囲の中で、事前に宣言されている明示カーソルを識別します。

datatype

型指定子です。 datatypeの構文は、「定数」を参照してください。

db_table_name

宣言がPL/SQLコンパイラによって処理されるときにアクセスできる必要があるデータベースの表(またはビュー)を識別します。

expression

変数、定数、リテラル、演算子、ファンクション・コールの組合せです。 最も単純な式は、1個の変数で構成されています。 宣言がPL/SQLコンパイラによって処理されるときに、expressionの値がパラメータに代入されます。 その値とパラメータのデータ型には互換性が必要です。


注意:

カーソルのオープン時にparameter_nameに実際のパラメータを指定すると、expressionは評価されません。

parameter_name

カーソルの仮パラメータとして宣言された変数を識別します。 カーソルのパラメータは、問合せの中で定数が使用できる場所であれば、どこででも使用できます。 カーソルの仮パラメータはINパラメータにしてください。 問合せは、有効範囲の他のPL/SQL変数を参照することもできます。

record_name

現行の有効範囲の中で事前に宣言されているユーザー定義のレコードを識別します。

record_type_name

データ型指定子RECORDを使用して定義されたユーザー定義のレコード型を識別します。

RETURN

カーソルの戻り値のデータ型を指定します。 RETURN句で%ROWTYPE属性を使用すると、データベースの表の行や、事前に宣言されたカーソルによって戻される行を表すレコード型を与えることができます。 また、%TYPE属性を使用して、事前に宣言されたレコードのデータ型を与えることもできます。

カーソル本体には、SELECT文と、対応するカーソル仕様部と同じRETURN句が必要です。 さらに、SELECT句の中の選択項目の数、順序およびデータ型は、RETURN句と一致している必要があります。

%ROWTYPE

データベース表の中の行、または事前に宣言されたカーソルやカーソル変数からフェッチされる行を表すレコード型を指定します。 レコードの中のフィールドと、それに対応する行の中の列は、同じ名前とデータ型を持ちます。

select_statement

SQLのSELECT文。 カーソル宣言でパラメータを宣言した場合は、各パラメータをselect_statementで使用する必要があります。


参照:

SELECT文の構文は、『Oracle Database SQL言語リファレンス』を参照してください。

%TYPE

事前に宣言されているユーザー定義のレコードのデータ型を指定します。

使用上の注意

OPEN文、FETCH文またはCLOSE文でカーソルを参照する前に、そのカーソルを宣言します。


注意:

パッケージ仕様部で宣言された明示カーソルは、パッケージのAUTHID句の影響を受けます。 詳細は、「CREATE PACKAGE文」を参照してください。

カーソル宣言で変数を参照する前に、その変数を宣言します。 SQLという語は、SQLカーソルのデフォルト名としてPL/SQLによって予約されており、カーソル宣言の中では使用できません。

カーソル名に値を代入したり、カーソル名を式の中で使用することはできません。 ただし、カーソルの有効範囲規則は変数の有効範囲規則と同じです。 詳細は、「PL/SQLの識別子の有効範囲と可視性」を参照してください。

カーソルからデータを取り出す場合は、まずカーソルをオープンし、そこからフェッチします。 FETCH文ではターゲットとなる変数を指定するため、cursor_declarationSELECT文でINTO句を使用するのは冗長かつ誤りです。

カーソルのパラメータの有効範囲は、カーソルに対してローカルです。つまり、カーソル宣言の中で使用されている問合せの内側からしか参照できません。 カーソルのパラメータ値は、カーソルがオープンされているときに、カーソルに関連付けられた問合せから使用できます。 問合せは、有効範囲の他のPL/SQL変数を参照することもできます。

カーソルのパラメータのデータ型は、無制約で指定する必要があります(数値の精度と位取り、および文字列の長さは指定しません)。

関連トピック