カーソル変数への値の割り当て

SET ステートメントを使用すると、いくつかの方法でさまざまな時点で結果セットをカーソル変数に割り当てることができます。

このタスクについて

カーソル変数への照会結果セットの割り当て
SET ステートメントと CURSOR FOR キーワードを使用することにより、選択照会の結果セットをカーソル変数に割り当てることができます。 以下の例では、T という表への照会に関連した結果セットが、表と同じ行定義を持つ c1 という名前のカーソル変数に割り当てられます。
T が次のように定義される場合、
CREATE TABLE T  (C1 INT, C2 INT, C3 INT);
次のように定義された、厳密に型付けされたカーソル変数 C1 を想定すると、
CREATE TYPE simpleRow AS ROW (c1 INT, c2 INT, c3 INT);         
CREATE TYPE simpleCur AS CURSOR RETURNS simpleRow;
DECLARE c1 simpleCur;
次のように割り当てることができます。
SET c1 = CURSOR FOR SELECT * FROM T; 
c1 の定義は表 T と互換であるため、厳密な型判定の検査が成功します。c1 が緩やかに型付けされたカーソルであれば、データ・タイプ検査は実行されないため、この場合もこの割り当てが成功します。
カーソル変数へのリテラル値の割り当て
SET ステートメントと CURSOR FOR キーワードを使用することにより、選択照会の結果セットをカーソル変数に割り当てることができます。 以下の例では、T という表への照会に関連した結果セットが、表と同じ行定義を持つ c1 という名前のカーソル変数に割り当てられます。
表 T が次のように定義されるとします。
CREATE TABLE T  (C1 INT, C2 INT, C3 INT);  
行タイプ simpleRow、およびカーソル・タイプ simpleCur がそれぞれ次のように作成されるとします。
CREATE TYPE simpleRow AS ROW (c1 INT, c2 INT, c3 INT);         
CREATE TYPE simpleCur AS CURSOR RETURNS simpleRow;
厳密に型付けされたカーソル変数 c1 がプロシージャー内で次のように宣言されるとします。
DECLARE c1 simpleCur;  
次のようにして、リテラル値をカーソル c1 に割り当てることができます。
SET c1 = CURSOR FOR VALUES (1, 2, 3);
リテラル値はカーソル定義と互換であるため、厳密な型判定の検査が成功します。 以下の例では、リテラル・データ・タイプがカーソル・タイプ定義と非互換であるため、リテラル値の割り当てが失敗します。
SET c1 = CURSOR FOR VALUES ('a', 'b', 'c'); 
カーソル変数値へのカーソル変数値の割り当て
2 つのカーソル変数の結果セット定義が同じである場合に限り、1 つのカーソル変数値を別のカーソル変数に割り当てることができます。 以下に例を示します。
厳密に型付けされたカーソル変数 c1 および c2 が次のように定義されているとします。
CREATE TYPE simpleRow AS ROW (c1 INT, c2 INT, c3 INT);

CREATE TYPE simpleCur AS CURSOR RETURNS simpleRow

DECLARE c1 simpleCur;

DECLARE c2 simpleCur;
次のように c2 に値が割り当てられたとします。

SET c2 = CURSOR FOR VALUES (1, 2, 3);
次のようにして、c2 の結果セットをカーソル変数 c1 に割り当てることができます。

 SET c1 = c2;

カーソル変数に値を割り当てた後、カーソル変数およびカーソル変数フィールド値の割り当てや参照が可能になります。