SQL プロシージャーからの結果セットの戻り

SQL プロシージャーでは、カーソルを使用して、結果セットの行を繰り返す以上のことを実行できます。 カーソルを使用して、結果セットを呼び出し側プログラムに戻すこともできます。 結果セットは、SQL プロシージャー (ネストされたプロシージャー呼び出しの場合)、または CLI アプリケーション・プログラミング・インターフェース、Java™、CLI、または .NET CLR 言語を使用して、C でプログラミングされたクライアント・アプリケーションにより取得できます。

始める前に

SQL プロシージャーを作成する権限を持っている必要があります。

手順

SQL プロシージャーから結果セットを戻すには、次のようにします。

  1. CREATE PROCEDURE ステートメントで DYNAMIC RESULT SETS 節を指定します。
  2. WITH RETURN 節を使用してカーソルに対して DECLARE を実行します。
  3. SQL プロシージャー内のカーソルをオープンします。
  4. クライアント・アプリケーションに対してカーソルをオープンしたままにして、それをクローズしないようにしてください。

以下に示すのは、単一の結果セットだけを戻す 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 Re

SQL プロシージャーの戻りの前に 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
@