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

HCOSS SQL CLR ストアド プロシージャは、次の操作を実行できます。

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

結果セットを返さない HCOSS ストアド プロシージャを呼び出すには、CALL 埋め込み SQL 文を使用します。CALL 文の使用に関する詳細は、CALL のトピックを参照してください。

SQL CLR ストアド プロシージャからの結果セットの受け取り

ストアド プロシージャが 1 つ以上の結果セットを返す場合、一連の埋め込み SQL 文を使用して受け取る必要があります。まず、CALL 文を使用してストアド プロシージャを呼び出します。次に、ASSOCIATE LOCATORS 文を使用して適切な数の結果セットを定義します。その後、定義した結果セットに対して 1 つの ALLOCATE CURSOR 文を発行します。たとえば、次のコードでは、2 つの結果セット ロケーターを割り当てられた 2 つのカーソルに関連付けることで、2 つの結果セットを返します。つまり、結果セットをそれらのカーソルにマッピングします。

     EXEC SQL CALL MYPROC(:hv-country) 
     END-EXEC
     EXEC SQL
        ASSOCIATE LOCATORS (:RS1,:RS2) WITH PROCEDURE MYPROC
     END-EXEC 
     EXEC SQL
         ALLOCATE C1 CURSOR FOR RESULT SET :RS1
     END-EXEC
     EXEC SQL
         ALLOCATE C2 CURSOR FOR RESULT SET :RS2
     END-EXEC

この時点で、その他の SQL カーソルと同様に FETCH 文を使用して各結果セットをフェッチします。また、同時にこれらのカーソルへのアクセスをインターリーブすることもできます。たとえば、上記のシナリオを使用して、C1 からフェッチしてからすぐに C2 からフェッチできます。

最後に、カーソル処理が済んだら、CLOSE 文を使用して結果セット処理を終了します。

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

呼び出し元のプログラムで SQL CLR ストアド プロシージャから結果セットを受け取る場合、ストアド プロシージャに、呼び出し元のプログラムで割り当てられたカーソルを指定し、さらに WITH RETURN 句を指定する DECLARE CURSOR 文が含まれている必要があります。また、ストアド プロシージャでカーソルを開く必要があります。次に例を示します。
   EXEC SQL
       DECLARE C1 SCROLL CURSOR 
            WITH RETURN TO CALLER 
            FOR 
               SELECT CUSTOMERID from CUSTOMERS
   END-EXEC
   EXEC SQL
         OPEN C1
   END-EXEC

ストアド プロシージャの結果セットの返し

SQL(DIALECT=MAINFRAME) でコンパイルされた COBOL ストアド プロシージャにより、メインフレーム動作がエミュレートされ、実際の結果セットではなく結果セット ロケーターが返されます。COBOL および PL/I 以外の言語で記述されたアプリケーションを呼び出す場合と、SQL(DIALECT=MAINFRAME) でコンパイルされていない COBOL アプリケーションおよび PL/I アプリケーションの場合、SQL(OPTION=NORSLOCATORS) を使用してストアド プロシージャをビルドします。その後、結果セットが通常の SQL Server 結果セットとして返されます。