カーソル述部
カーソル述部は、現行の有効範囲内に定義されたカーソルの状態を調べるために使用する SQL キーワードです。 これを使用して、カーソルがオープンされたか、クローズされたか、またはカーソルによって処理されている行があるかどうかを簡単に参照できます。
- cursor-variable-name
- カーソル・タイプの SQL 変数または SQL パラメーターの名前。
- IS
- カーソル述部のプロパティーを検査することを指定します。
- NOT
- カーソル述部のプロパティーを検査する対向値を戻すことを指定します。
- FOUND
- カーソルが、FETCH ステートメントの実行後に行を保有しているかどうかを検査することを指定します。最後の FETCH ステートメントが成功していた場合に、IS FOUND 述部の構文が使用されると、戻り値は TRUE となります。最後に実行された FETCH ステートメントの結果、行が存在しなかった場合、戻される値は FALSE となります。以下にあてはまる場合、戻り値は不明です。
- cursor-variable-name 値が NULL である
- cursor-variable-name の基礎カーソルがオープンされていない
- 基礎カーソル上で最初の FETCH 操作が実行される前に、述部が評価された
- 最後の FETCH 操作でエラーが戻された
NOT キーワードが指定されて、構文が IS NOT FOUND となる場合、結果の値は反対になります。
- OPEN
- カーソルがオープン状態かどうかを検査することを指定します。カーソルがオープンされている場合に、OPEN 述部の構文が使用されると、戻り値は TRUE となります。カーソルがパラメーターとして関数およびプロシージャーに渡されるときに有効な述部です。カーソルのオープンを試行する前に、この述部を使用してカーソルが既にオープンされていないかどうかを調べることができます。
注
- カーソル述部は、コンパウンド SQL (コンパイル済み) ステートメント内のステートメントのみで使用できます (SQLSTATE 42818)。
例
以下のスクリプトは、プロシージャーのコンパイルおよび呼び出しを成功させるために必要な前提条件オブジェクトを定義し、さらに、カーソル述部の参照を行う SQL プロシージャーを定義します。CREATE TABLE T1 (c1 INT, c2 INT, c3 INT)@
INSERT INTO T1 VALUES (1,1,1),(2,2,2),(3,3,3) @
CREATE TYPE myRowType AS ROW(c1 INT, c2 INT, c3 INT)@
CREATE TYPE myCursorType AS myRowType CURSOR@
CREATE PROCEDURE p(OUT count INT)
LANGUAGE SQL
BEGIN
DECLARE C1 CURSOR;
DECLARE lvarInt INT;
SET count = -1;
SET c1 = CURSOR FOR SELECT c1 FROM t1;
IF (c1 IS NOT OPEN) THEN
OPEN c1;
ELSE
set count = -2;
END IF;
SET count = 0;
IF (c1 IS OPEN) THEN
FETCH c1 INTO lvarInt;
WHILE (c1 IS FOUND) DO
SET count = count + 1;
FETCH c1 INTO lvarInt;
END WHILE;
ELSE
SET COUNT = 0;
END IF;
END@
CALL p()@ 