OpenESQL ストアド プロシージャおよび結果セットの操作

OpenESQL ストアド プロシージャでは、次の処理を実行できます。

注:ストアド プロシージャの機能はデータベース製品ごとに大きく異なり、各製品は上記の機能を部分的に実装しているに過ぎません。このため、データベース間でのストアド プロシージャの呼び出しの移植性は、OpenESQL 文に比べると大幅に限定されます。

結果セットを返さないストアド プロシージャの呼び出し

結果セットを返さないストアド プロシージャを呼び出すには、CALL 埋め込み SQL 文または EXECSP 埋め込み SQL 文 (Micro Focus Embedded SQL Toolkit for Microsoft SQL Server との互換性を確保する場合) を使用します。これらの文の使用方法の詳細は、「CALL」と「EXECSP」の各トピックを参照してください。

1 つ以上の結果セットを返すストアド プロシージャの呼び出し

1 つ以上の結果セットを返すストアド プロシージャは、DECLARE CURSOR 文を使用して宣言する必要があります。次に例を示します。

         EXEC SQL 
                DECLARE cursorName CURSOR FOR storedProcedureCallStatement
         END-EXEC

次に、OPEN 文を使用してカーソルを開くその他のタイプのカーソルと同じように、ストアド プロシージャを呼び出し、その後に FETCH 文を続けて結果セットの行をフェッチします。

複数の結果セットを返すようにストアド プロシージャがコーディングされている場合で、FETCH 文から 100 の SQLCODE (現在の結果セットの終わりを示す) が返された場合、GET NEXT RESULT SET 文を使用して後続の結果セットを次のようにフェッチできます。
          EXEC SQL
                 GET NEXT RESULT SET FOR cursorName
          END-EXEC

GET NEXT RESULT SET 文から 0 の SQLCODE が返された場合、使用可能な他の結果セットがあるため、GET NEXT RESULT SET をさらに発行してそれらを取得できます。ただし、GET NEXT RESULT SET で 100 の SQLCODE が返された場合、使用可能な結果セットはもうありません。

配列パラメーターの使用

ODBC パラメーターは Oracle の配列引数とは異なります。パラメーター配列を使用する場合は、配列の各要素に同じ文を繰り返し実行した場合と同じ結果を得られます。ストアド プロシージャ呼び出しで 1 つのパラメーターを配列として渡すと、他のすべての引数も同じ数の要素を含む配列として渡されます。ストアド プロシージャでは、これらのパラメーターの各「行」で呼び出された場合と同様の処理が実行されます。呼び出しの前に次の句を置くことで、渡す行数を配列全体のサイズ未満に制限できます。
FOR :hvar
				

ここで、:hvar は整数のホスト変数で、渡される行の数が格納されます。

結果セットを返す SQL CLR ストアド プロシージャのコーディング

ストアド プロシージャで 1 つ以上のカーソルを宣言し、宣言した各カーソルから複数の結果セットが返されるよう複数の SELECT 文を定義内に含めることで、呼び出し側のプログラムに複数の結果セットを返します。

特定のカーソルで複数の結果セットを返すには、ストアド プロシージャ内の DECLARE CURSOR 文でカーソルを開き、さらに取得する各結果セットの SELECT 文を含める必要があります。次に例を示します。
      EXEC SQL 
          DECLARE C1 CURSOR
          FOR
              SELECT CUSTID FROM COMPANY;
              SELECT CUSTNAME FROM COMPANY;
      END-EXEC
      EXEC SQL OPEN C1 END-EXEC

      EXEC SQL 
      DECLARE C2 CURSOR
      FOR
          SELECT COMPNAME FROM COMPANY;
      END-EXEC
      EXEC SQL OPEN C2 END-EXEC

この例には C1 と C2 という 2 つのカーソルがあり、C1 が 2 つの結果セットを、C2 が 1 つの結果セットを返します。そのため、これらのカーソルによって合計 3 つの結果セットが呼び出し側アプリケーションに返されます。

ストアド プロシージャ内でカーソル処理が済んだら、WITH RETURN 句を含む CLOSE 文を使用して各カーソルを閉じます。次に例を示します。
EXEC SQL CLOSE C1 WITH RETURN TO CALLER END-EXEC
EXEC SQL CLOSE C2 WITH RETURN TO CALLER END-EXEC

カーソルが閉じられると、関連付けられていた結果セットが呼び出し側アプリケーションで使用可能になります。

注:ストアド プロシージャが返ったときに開いていた、順方向で読み取り専用カーソルも呼び出し側アプリケーションに返されます。