SQL プロシージャーからの結果セットの戻り
SQL プロシージャーでは、カーソルを使用して、結果セットの行を繰り返す以上のことを実行できます。 カーソルを使用して、結果セットを呼び出し側プログラムに戻すこともできます。
結果セットは、SQL プロシージャー (ネストされたプロシージャー呼び出しの場合)、または CLI アプリケーション・プログラミング・インターフェース、Java™、CLI、または .NET CLR 言語を使用して、C でプログラミングされたクライアント・アプリケーションにより取得できます。
始める前に
SQL プロシージャーを作成する権限を持っている必要があります。
手順
SQL プロシージャーから結果セットを戻すには、次のようにします。
- CREATE PROCEDURE ステートメントで DYNAMIC RESULT SETS 節を指定します。
- WITH RETURN 節を使用してカーソルに対して DECLARE を実行します。
- SQL プロシージャー内のカーソルをオープンします。
- クライアント・アプリケーションに対してカーソルをオープンしたままにして、それをクローズしないようにしてください。
例
以下に示すのは、単一の結果セットだけを戻す SQL プロシージャーの例です。
CREATE PROCEDURE read_emp()
SPECIFIC read_emp
LANGUAGE SQL
DYNAMIC RESULT SETS 1
Re: BEGIN
DECLARE c_emp CURSOR WITH RETURN FOR
SELECT salary, bonus, comm.
FROM employee
WHERE job != 'PRES';
OPEN c_emp;
END ReSQL プロシージャーの戻りの前に CLOSE ステートメントを使用してカーソルがクローズされた場合、カーソルの結果セットは呼び出し元またはクライアント・アプリケーションには戻されません。
複数の結果セットを、複数のカーソルを使用して SQL プロシージャーから戻すことができます。 複数のカーソルを戻すには、以下を実行する必要があります。
- CREATE PROCEDURE ステートメントで DYNAMIC RESULT SETS 節を指定します。 戻される可能性がある結果セットの最大可能数を指定します。 実際に戻される結果セットの数は、この数を超えることはできません。
- WITH RETURN 節を指定する、戻される各結果セットに対してカーソルを宣言します。
- 戻されるカーソルをオープンします。
- クライアント・アプリケーションに対してカーソルをオープンしたままにする - これはクローズしないでください。
戻される結果セットごとに 1 つのカーソルが必要です。
結果セットは、オープンされる順序で呼び出し元に戻されます。
結果セットを戻す SQL プロシージャーを作成すると、それを呼び出して結果セットを取得することができます。
同じカーソルの複数インスタンスを使用可能にすることによって、複数の結果セットを返すこともできます。 WITH RETURN TO CLIENT を使用してカーソルに対して DECLARE を実行する必要があります。
以下の例では、WITH RETURN TO CLIENT を使用して、オープン・カーソルの複数インスタンスを使用可能にします。
CREATE PROCEDURE PROC(IN a INT)
BEGIN
DECLARE index INTEGER DEFAULT 1;
WHILE index < a DO
BEGIN
DECLARE cur CURSOR WITH RETURN TO CLIENT FOR SELECT * FROM T WHERE pk = index;
OPEN cur;
SET index = index + 1;
END;
END WHILE;
END
@