明示カーソルは、複数行の問合せの実行時にデータベースによって処理情報が格納される名前の付けられていない作業領域に名前を付けます。 作業領域に名前を付けておくと、その情報にアクセスし、問合せの行を個別に処理できます。
構文
cursor_declaration ::=
(cursor_parameter_declaration ::=、rowtype ::=)
cursor_spec ::=
(cursor_parameter_declaration ::=、rowtype ::=)
cursor_body ::=
cursor_parameter_declaration ::=
rowtype ::=
キーワードとパラメータの説明
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
文でカーソルを参照する前に、そのカーソルを宣言します。
カーソル宣言で変数を参照する前に、その変数を宣言します。 SQLという語は、SQLカーソルのデフォルト名としてPL/SQLによって予約されており、カーソル宣言の中では使用できません。
カーソル名に値を代入したり、カーソル名を式の中で使用することはできません。 ただし、カーソルの有効範囲規則は変数の有効範囲規則と同じです。 詳細は、「PL/SQLの識別子の有効範囲と可視性」を参照してください。
カーソルからデータを取り出す場合は、まずカーソルをオープンし、そこからフェッチします。 FETCH
文ではターゲットとなる変数を指定するため、cursor_declaration
のSELECT
文でINTO
句を使用するのは冗長かつ誤りです。
カーソルのパラメータの有効範囲は、カーソルに対してローカルです。つまり、カーソル宣言の中で使用されている問合せの内側からしか参照できません。 カーソルのパラメータ値は、カーソルがオープンされているときに、カーソルに関連付けられた問合せから使用できます。 問合せは、有効範囲の他のPL/SQL変数を参照することもできます。
カーソルのパラメータのデータ型は、無制約で指定する必要があります(数値の精度と位取り、および文字列の長さは指定しません)。
関連トピック