DECLARE <cursorName> CURSOR FOR
SQLスクリプトで静的カーソルを定義するには、静的カーソルに一意の名前を付け、カーソルに関連付けられたクエリ式を指定します。
構文
DECLARE <cursorName> CURSOR FOR <queryExpression>
備考
•名前解決は、スタンドアロンのSELECTステートメントのように機能します。
•変数をクエリ式で使用することはできません。
•バインド変数(「?」など)は使用できません。
•静的カーソルを宣言することは、JDBCでステートメントを準備することと論理的に同等です。
•このように宣言されたカーソルは定数のようなもので、値を変更することはできません。
例
PROCEDURE p (OUT p_name VARCHAR)
BEGIN
DECLARE c CURSOR FOR SELECT name FROM /shared/T;
OPEN c;
FETCH c INTO p_name;
CLOSE c;
END
以下の手順では、名が返されます。
PROCEDURE p (OUT p_name VARCHAR)
BEGIN
DECLARE c CURSOR FOR SELECT name FROM /shared/T;
OPEN c;
FETCH c INTO p_name;
CLOSE c;
...
--Reopen cursor
OPEN c;
FETCH c INTO p_name;
CLOSE c;
END
以下の手順では、cとdの2つのカーソルを操作します。
PROCEDURE p
BEGIN
DECLARE c CURSOR (name VARCHAR);
DECLARE d CURSOR FOR SELECT name FROM /shared/T;
--Open a new cursor in cursor variable c
OPEN c FOR SELECT name FROM /shared/T;
Assign the cursor referred to by d to c
The original cursor referred to by c is no longer accessible
SET c = d;
--c and d cursor variables now refer to the same cursor
--Use either one to open the cursor
OPEN d; -- or OPEN c
--c.ISOPEN is true
以下の手順では、開いた静的カーソルを返します。
PROCEDURE p (OUT p_cursor CURSOR (name VARCHAR))
BEGIN
DECLARE c CURSOR FOR SELECT name FROM /shared/T;
SET p_cursor = c;
OPEN p_cursor;
END
--Returns an opened static cursor
PROCEDURE p (OUT p_cursor CURSOR (name VARCHAR))
BEGIN
OPEN p_cursor FOR SELECT name FROM /shared/T;
END
PROCEDURE p (OUT p_id INTEGER, OUT p_name VARCHAR)
BEGIN
DECLARE c CURSOR FOR SELECT id, name FROM /shared/T;
DECLARE r ROW (id INTEGER, name VARCHAR);
OPEN c;
FETCH INTO c;
CLOSE c;
SET p_id = r.id;
SET p_name = r.name;
END
PROCEDURE p ( )
BEGIN
DECLARE TYPE r_type ROW (id INTEGER, name VARCHAR);
DECLARE c CURSOR r_type;
DECLARE r r_type;
OPEN c FOR SELECT id, name FROM /shared/T;
FETCH INTO c;
CLOSE c;
END