ブロック カーソル

多くのアプリケーションでは、ネットワーク経由でデータを取り込むのにかなりの時間がかかります。 この時間の一部は、実際にネットワーク経由でデータを取り込むのに費やされ、その一部は、データ行を要求するためにドライバーによって行われた呼び出しなど、ネットワーク のオーバーヘッドに費やされます。 後者の時間は、アプリケーションが一度に複数の行を返すことができるブロック、または脂肪、カーソルを効率的に使用する場合に短縮できます。

アプリケーションには、常にブロック カーソルを使用するオプションがあります。 一度に 1 行しかフェッチできないデータ ソースでは、ドライバーでブロック カーソルをシミュレートする必要があります。 これを行うには、複数の単一行フェッチを実行します。 これはパフォーマンスを向上させる可能性はほとんどありませんが、アプリケーションの機会を開きます。 このようなアプリケーションでは、DBMS がブロック カーソルをネイティブに実装し、それらの DBMS に関連付けられているドライバーがそれらを公開すると、パフォーマンスが向上します。

ブロック カーソルを使用して 1 回のフェッチで返される行は、行セットと呼ばれます。 行セットと結果セットを混同しないことが重要です。 結果セットはデータ ソースで保持され、行セットはアプリケーション バッファーに保持されます。 結果セットは固定されていますが、行セットは固定されていません。新しい行セットがフェッチされるたびに位置と内容が変更されます。 従来の SQL 順方向専用カーソルなどの単一行カーソルが現在の行を指すように、ブロック カーソルは行セットを指します。これは現在の行と考えることができます。

複数の行がフェッチされたときに 1 つの行に対して動作する操作を実行するには、アプリケーションが最初に現在の行である行を指定する必要があります。 現在の行は、SQLGetData の呼び出しと配置された更新および削除ステートメントで必要です。 ブロック カーソルが最初に行セットを返す場合、現在の行は行セットの最初の行になります。 現在の行を変更するために、アプリケーションは SQLSetPos または SQLBulkOperations を呼び出します (ブックマークで更新するため)。 次の図は、結果セット、行セット、現在の行、行セット カーソル、ブロック カーソルの関係を示しています。 詳細については、ブロック カーソルの使用、このセクションの後半、また位置指定された Update ステートメントと Delete ステートメント、やSQLSetPos を使用したデータの更新を参照してください。

Fetching Next, Prior, First, and Last Rowsets

カーソルがブロック カーソルであるかどうかは、スクロール可能かどうかとは無関係です。 たとえば、レポート アプリケーションの作業のほとんどは、行の取得と印刷に費やされます。 このため、前方専用のブロック カーソルで最も高速に動作します。 前方専用カーソルを使用してスクロール可能なカーソルの費用を回避し、ブロック カーソルを使用してネットワーク トラフィックを減らします。

このセクションでは、次のトピックを扱います。