複数の結果

結果とは、ステートメントの実行後にデータ ソースによって返されるものです。 ODBC には、結果セットと行数という 2 種類の結果があります。 行数とは、UPDATE、DELETE、または INSERT ステートメントの影響を受ける行数です。 バッチ (「SQL ステートメントのバッチ」で説明) では、複数の結果を生成できます。

次の表に、データ ソースから異なる種類のバッチごとに複数の結果が返されるかどうかを判断するためにアプリケーションが使用する SQLGetInfo オプションの一覧を示します。 特に、データ ソースは、ステートメントのバッチ全体に対して 1 つの行数を返すことも、バッチ内の各ステートメントの個々の行数を返すこともできます。 パラメーターの配列を使用して結果セット生成ステートメントを実行した場合、データ ソースは、パラメーターのすべてのセットに対して 1 つの結果セットを返すか、パラメーターのセットごとに個々の結果セットを返すことができます。

バッチの種類 行数 結果セット
明示的なバッチ SQL_BATCH_ROW_COUNT[a] --[b]
プロシージャ SQL_BATCH_ROW_COUNT[a] --[b]
パラメーターの配列 SQL_PARAM_ARRAYS_ROW_COUNTS SQL_PARAM_ARRAYS_SELECTS

[a] バッチ内の行数生成ステートメントはサポートされている可能性がありますが、行数の戻り値はサポートされていません。 SQLGetInfo の SQL_BATCH_SUPPORT オプションは、バッチで行数生成ステートメントを許可するかどうかを示します。SQL_BATCH_ROW_COUNTS オプションは、これらの行数がアプリケーションに返されるかどうかを示します。

[b] 明示的なバッチとプロシージャは、複数の結果セット生成ステートメントが含まれる場合、常に複数の結果セットを返します。

Note

ODBC 1.0 で導入された SQL_MULT_RESULT_SETS オプションは、複数の結果セットを返すことができるかどうかに関する一般的な情報のみを提供します。 特に、SQL_BATCH_SUPPORT に対して SQL_BS_SELECT_EXPLICIT ビットまたは SQL_BS_SELECT_PROC ビットが返される場合、または SQL_PARAM_ARRAYS_SELECT に対して SQL_PAS_BATCH が返される場合、このオプションは "Y" に設定されます。

複数の結果を処理するために、アプリケーションは SQLMoreResults を呼び出します。 この関数は、現在の結果を破棄し、次の結果を取得できるようにします。 他に取得できる結果セットがない場合は、SQL_NO_DATA が返されます。 たとえば、次のステートメントがバッチとして実行されたとします。

SELECT * FROM Parts WHERE Price > 100.00;  
UPDATE Parts SET Price = 0.9 * Price WHERE Price > 100.00  

これらのステートメントが実行されると、アプリケーションは SELECT ステートメントによって作成された結果セットから行をフェッチします。 行のフェッチが完了すると、アプリケーションは SQLMoreResults を呼び出して、価格が変更されたパーツの数を取得できるようにします。 必要に応じて、SQLMoreResults はフェッチされていない行を破棄し、カーソルを閉じます。 その後、アプリケーションは SQLRowCount を呼び出して、UPDATE ステートメントによって価格が変更されたパーツの数を判断します。

結果を取得できるようになる前にバッチ ステートメント全体を実行するかどうかは、ドライバーによって異なります。 一部の実装では、そのように処理しています。それ以外の実装では、SQLMoreResults を呼び出すと、バッチ内の次のステートメントの実行がトリガーされます。

バッチ内のいずれかのステートメントが失敗した場合、SQLMoreResults は SQL_ERROR または SQL_SUCCESS_WITH_INFO を返します。 ステートメントが失敗してバッチが中止された場合、または失敗したステートメントがバッチの最後のステートメントであった場合、SQLMoreResults は SQL_ERROR を返します。 ステートメントが失敗してもバッチが中止されず、失敗したステートメントがバッチ内の最後のステートメントでない場合、SQLMoreResults は SQL_SUCCESS_WITH_INFO を返します。 SQL_SUCCESS_WITH_INFO は、少なくとも 1 つの結果セットまたはカウントが生成されて、バッチが中止されなかったことを示します。