外部ストアド プロシージャのCREATE PROCEDURE文またはREPLACE PROCEDURE文がDYNAMIC RESULT SETS句を指定する場合、外部ストアド プロシージャで、その完了時に、クライアント アプリケーションまたは外部ストアド プロシージャの呼び出し側に戻される動的な結果セットを作成できます。
結果セットとは、外部ストアド プロシージャが実行するSELECT文の結果として得られる行のセットです。 外部ストアド プロシージャでは、DYNAMIC RESULT SETS句の指定に応じて、結果セットを15個まで作成できます。
外部ストアド プロシージャから結果セットを作成するには、以下の手順に従います。
- CLIv2を使用して直接SQLを実行するCまたはC++外部ストアド プロシージャを定義するための基本的なステップを実行します(手順の概略を参照)。
- 単一のSELECT文を実行し、DBCAREAの以下のオプションを設定します。
オプション | 値 | 説明 |
---|---|---|
ストアド プロシージャの戻り値の結果 | 2 | SELECT文に対する応答をクライアント アプリケーションに戻します。 |
3 | SELECT文に対する応答を外部ストアド プロシージャの呼び出し側に戻します。 | |
4 | SELECT文に対する応答をクライアント アプリケーションと外部ストアド プロシージャに戻します。 | |
5 | SELECT文に対する応答を外部ストアド プロシージャの呼び出し側と外部ストアド プロシージャに戻します。 | |
応答保持 | 'Y' | NO SCROLLカーソルのルールに従って、行のセットが戻されます。 |
'P' | SCROLLカーソルのルールに従って、行のセットが戻されます。 |
以下に、SELECT文を実行し、外部ストアド プロシージャの呼び出し側に戻す結果セットを作成する、外部ストアド プロシージャのコードの一部を示します。
... memset(str1, ' ', 100); sprintf(str1, "SELECT * FROM UserIds WHERE UName = %s;", A_Name); dbcarea.func = DBFIRQ; dbcarea.req_ptr = str1; dbcarea.req_len = strlen(str1); dbcarea.change_opts = 'Y'; dbcarea.SP_return_result = 3; dbcarea.keep_resp = 'Y'; DBCHCL(&result, cntxt, &dbcarea); ...
外部ストアド プロシージャの実行後、データベースは外部ストアド プロシージャによって作成される結果セットをクライアントまたは呼び出し側に戻します。