動的結果セットは、CLIv2 APIを使用してCまたはC++で記述された外部プロシージャでサポートされます。また、JDBC APIを使用してJava外部プロシージャでサポートされます。
プロシージャは、0から15の範囲内の結果セットを返すことができます。
結果セットを作成し、呼び出し側またはクライアントに返すには、外部プロシージャが次を実行する必要があります。
- デフォルト接続である、外部プロシージャのセッションと同じセッションを使用して、データベースにリクエストを実行する。
- SELECTリクエストを含む単一文を実行する。
- オプション パーセルの1、2、3、または4のSPReturnResultを指定する。
- 応答継続または位置付けを指定する。
パーセルの取得のためにEndRequestが呼び出されるまで保持する結果セット この値に対するkeep_respの設定 行ごとのランダム順番、またはDBCAREA設定のPositioning-action、Positioning-statement-number、そしてPositioning-valueの値を使用した行内の順序 P 順番に行われ、Rewind関数が呼び出され、続けてパーセルが再度取得可能になる Y
外部プロシージャが実行されると、実行中に作成された、前述の箇条書きの条件に一致する結果セットが、次の条件をすべて満たすときに呼び出しプロシージャまたは外部プロシージャのクライアント アプリケーションに返されます。
- 外部プロシージャは、キャンセル パーセルをディスパッチャに送信していない。
- 呼び出し側またはクライアントは、プロシージャを呼び出したリクエストのオプション パーセルでDynamicResultSetsAllowedをYに設定して、結果セットの受信に同意を示している。
- 返される結果セットの数が、CREATE PROCEDUREリクエストまたはREPLACE PROCEDUREリクエストのDYNAMIC RESULT SETS句のnumber_of_sets値より少ないか等しい。
外部プロシージャがdoesキャンセル パーセルをディスパッチャに送信する場合、ディスパッチャは結果セットを呼び出し側またはクライアントに返しません。
SQLプロシージャのSCROLLおよびNO SCROLLカーソルの機能を一致させるために、SetPositionパーセル、フレーバー157かどうかによって呼出し側またはクライアントに返される行のセットは、SELECTリクエストとともに送信されます。
SetPositionパーセルの指定 | 返される行セットが従うルール |
---|---|
送信 | SCROLLカーソル |
送信なし | NO SCROLLカーソル |
CLIv2アプリケーションの場合、SetPositionパーセルは、keep_resp = Pのときに送信されます。
外部プロシージャは、ResultSetCurrentPositionパーセルをディスパッチャ継続受信箱に送信し、外部プロシージャの前に読み込んだ最終行が完了していることを示します。プロシージャがResultSetCurrentPositionパーセルを送信しないと、プラットフォームは、応答全体が送信されている間に読み込まれた行がなかったと推定します。この推定は、外部プロシージャが継続リクエストをデータベースに送信した場合にも行なわれます。
外部プロシージャは、外部プロシージャを呼び出す同じセッションに設定されたオプション パーセルのDynamicResultSetsAllowedフィールドでCALLを実行することで、動的結果セットを読み込むことができます。