13.28 明示カーソルの宣言および定義
明示カーソルは、特定の問合せまたはDML文(通常は、複数の行を戻すか複数の行に影響を与える文)の処理に関する情報を格納しておくSQLのプライベート領域を指す名前付きのポインタです。
明示カーソルを使用すると、結果セットの行を一度に1行ずつ取り出すことができます。
明示カーソルは、使用する前に宣言および定義する必要があります。最初に宣言して(cursor_declarationを使用)、後で同じブロック、サブプログラムまたはパッケージ内で定義する(cursor_definitionを使用)か、または宣言と定義を同時に行う(cursor_definitionを使用)ことができます。
明示カーソルの宣言および定義は、それぞれカーソル仕様部およびカーソル本体とも呼ばれます。
注意:
パッケージ仕様部で宣言された明示カーソルは、パッケージのAUTHID
句の影響を受けます。詳細は、「CREATE PACKAGE文」を参照してください。
ここでのトピック
構文
cursor_declaration ::=
cursor_definition ::=
cursor_parameter_dec ::=
rowtype ::=
セマンティクス
cursor_declaration
cursor
ここで宣言し、後で同じブロック、サブプログラムまたはパッケージ内で定義する明示カーソルの名前。cursor
は、予約語のSQL
を除く任意の識別子にできます。カーソルにはデータベース表と同じ名前を付けないことをお薦めします。
明示カーソル名は、変数と同じ有効範囲規則に従います(「識別子の有効範囲と可視性」を参照)。
cursor_definition
すでに宣言済の明示カーソルを定義するか、または明示カーソルの宣言と定義の両方を行います。
cursor
ここで定義を行う事前宣言済の明示カーソルの名前、または宣言と定義の両方を行う明示カーソルの名前(cursor
は、予約語のSQL
を除く任意の識別子にできます)。カーソルにはデータベース表と同じ名前を付けないことをお薦めします。
select_statement
SQLのSELECT
文(PL/SQLのSELECT
INTO
文ではない)。カーソルに仮パラメータが含まれている場合は、各パラメータをselect_statement
で使用する必要があります。select_statement
は、有効範囲内の他のPL/SQL変数を参照することもできます。
select_statementの制限
このselect_statement
にWITH
句を持たせることはできません。
参照:
SELECT
文の構文は、『Oracle Database SQL言語リファレンス』を参照してください。
cursor_parameter_dec
カーソル・パラメータの宣言。
parameter
宣言する仮カーソル・パラメータの名前。select_statement
では、定数を使用できる場所であればどこでもこの名前を使用できます。
IN
IN
を指定するかどうかに関係なく、仮カーソル・パラメータはIN
サブプログラム・パラメータの特性(詳細は表8-1を参照)を持ちます。カーソルをオープンすると、仮パラメータの値は実パラメータの値またはデフォルト値のいずれかになります。
datatype
パラメータのデータ型。
datatypeの制限
このdatatype
には制約(NOT
NULL
、数値の精度と位取り、文字列の長さなど)を持たせることはできません。
expression
仮カーソル・パラメータのデフォルト値を指定します。expression
と仮カーソル・パラメータのデータ型には、互換性がある必要があります。
仮カーソル・パラメータに対応する実パラメータをOPEN
文で指定しない場合は、expression
が評価され、その値が仮カーソル・パラメータに代入されます。
仮カーソル・パラメータに対応する実パラメータをOPEN
文で指定すると、実パラメータの値が仮カーソル・パラメータに代入され、expression
は評価されません。
rowtype
カーソルが戻す行のデータ型。この行の列は、select_statement
が戻す行の列と一致している必要があります。
db_table_or_view
宣言が処理されるときにアクセスできる必要があるデータベースの表またはビューの名前。
cursor
事前に宣言されている明示カーソルの名前。
cursor_variable
事前に宣言されているカーソル変数の名前。
record
事前に宣言されているレコード変数の名前。
record_type
データ型指定子RECORD
を使用して定義されたユーザー定義型の名前。
例