カーソル・データ・タイプの種類

カーソル・データ・タイプには、大別すると緩やかに型付けされたカーソル・データ・タイプと厳密に型付けされたカーソル・データ・タイプの 2 つの種類があります。 厳密に型付けされるか緩やかに型付けされるかのプロパティーは、データ・タイプの作成時に定義されます。 このプロパティーは、各タイプの作成済み変数に維持されます。

厳密に型付けされたカーソル・データ・タイプおよび緩やかに型付けされたカーソル・データ・タイプの特性について以下に取り上げます。
厳密に型付けされたカーソル・データ・タイプ
厳密に型付けされたカーソル・データ・タイプは、行データ構造によって指定された結果セット定義を使用して作成されたカーソル・データ・タイプです。 こうしたデータ・タイプが厳密に型付けされたと言われているのは、結果セット値が割り当てられる際、結果セットのデータ・タイプがチェック可能なためです。 カーソル・データ・タイプの結果セット定義は、行タイプ定義を指定すると定義できます。 厳密に型付けされたカーソル・データ・タイプに割り当てて保管できるのは、定義が一致する結果セットだけです。 割り当て時に厳密な型判定チェックが実行され、データ・タイプの不一致が見つかるとエラーが生じます。

厳密に型付けされたカーソル・データ・タイプの結果セット定義は、行データ・タイプ定義または SQL ステートメント定義によって提供できます。

以下は、カーソル・データ・タイプ定義の例で、rowType データ・タイプと同じ行フォーマットを持つ結果セットを戻すように定義されています。
	CREATE TYPE cursorType AS rowType CURSOR@
rowType 行定義と同じデータ・タイプ定義を持つデータの列が含まれる結果セットのみを、cursorType カーソル・データ・タイプとなるように宣言された変数に正常に割り当てることができます。
以下は、表 T1 で定義されているのと同じ行フォーマットを持つ結果セットを戻すように定義されている、カーソル・データ・タイプ定義の例です。
	CREATE TABLE T1 (C1 INT)

  CREATE TYPE cursorType AS ANCHOR ROW OF t1 CURSOR;

t1 の列定義と同じデータ・タイプ定義を持つデータの列が含まれる結果セットのみを、cursorType カーソル・データ・タイプとなるように宣言された変数に正常に割り当てることができます。

厳密に型付けされたカーソルに関連付けられている行定義は、アンカー・データ・タイプの定義として参照できます。 以下はそのことを示す例です。
CREATE TYPE r1 AS ROW (C1 INT);
CREATE TYPE c1 AS RTEST CURSOR;

DECLARE c1 CTEST;
DECLARE r1 ANCHOR ROW OF CV1; 
r1 という名前の行データ・タイプが定義され、r1 の行定義に関連付けられている c1 という名前のカーソル・タイプが定義されます。 後半の SQL ステートメントは、SQL プロシージャーで出現する可能性のある変数宣言の例です。 2 番目の変数宣言は、アンカー・データ・タイプとなるように定義された r1 という名前の変数用で、カーソル cv1 を定義するために使用された行タイプにアンカー付けされます。
緩やかに型付けされたカーソル・データ・タイプ
緩やかに型付けされたカーソル・データ・タイプは、いずれの行データ・タイプ定義とも関連付けられていません。 緩やかに型付けされたカーソル変数に値を割り当てる際には、型判別チェックは実行されません。
CURSOR という名前の、組み込みの緩やかに型付けされたカーソル・データ・タイプがあり、緩やかに型付けされたカーソル変数またはパラメーターを宣言するために使用できます。 以下は、組み込みの緩やかに型付けされたカーソル・データ・タイプ CURSOR に基づく、緩やかに型付けされたカーソル変数宣言の例です。
DECLARE cv1 CURSOR;

緩やかに型付けされたカーソル変数は、結果セットを不明な行定義で保管する必要がある場合に役立ちます。

緩やかに型付けされたカーソル変数を出力パラメーターとして戻すには、カーソルがオープンしていなければなりません。

今回のバージョンでは、緩やかに型付けされたカーソル・データ・タイプに基づく変数をアンカー・データ・タイプとして参照することはできません。

ユーザー定義の緩やかに型付けされたカーソル・データ・タイプを定義できます。

カーソル変数のその他の特性すべては、各タイプのカーソル変数で共通です。