Share via


キーセット ドリブン カーソル

キーセット ドリブン カーソルでは、変更点を検出する機能において、静的および動的カーソルの中間の機能が提供されます。 静的カーソルと同様に、結果セットのメンバーシップと順序に対する変更は常に検出されません。 動的カーソルと同様に、結果セット内の行の値に対する変更点が検出されます (SQL_ATTR_TXN_ISOLATION接続属性によって設定されたトランザクションの分離レベルに従います)。

キーセットドリブン カーソルを開くと、結果セット全体のキーが保存されます。これにより、結果セットの明らかなメンバーシップと順序が修正されます。 カーソルが結果セットをスクロールすると、この キーセット 内のキーを使用して各行の現在のデータ値が取得されます。 たとえば、キーセット ドリブン カーソルが行をフェッチした後で、別のアプリケーションによってその行が更新されるものとします。 カーソルが行を再フェッチすると、そのキーを使用して行が再フェッチされるため、表示される値は新しい値になります。 このため、キーセット ドリブン カーソルは、常に自身と他のユーザーによって行われた変更点を検出します。

カーソルが削除された行を取得しようとすると、この行は結果セットに "穴" として表示されます。行のキーはキーセットに存在しますが、その行は結果セットに存在しなくなります。 行のキー値が更新されると、その行は削除された後に挿入されたと見なされるため、そのような行は結果セットの穴としても表示されます。 キーセット ドリブン カーソルでは、他のプロセスによって削除された行を常に検出できますが、必要に応じて、それ自体を削除する行のキーを除去できます。 これを行うキーセット ドリブン カーソルでは、それ自体の削除を検出できません。 特定のキーセット ドリブン カーソルが独自の削除を検出するかどうかは、SQLGetInfo の SQL_STATIC_SENSITIVITY オプションを使用して報告されます。

キーセットにこれらの行のキーが存在しないため、他のユーザーによって挿入された行は、キーセットドリブン カーソルには表示されません。 ただし、キーセットドリブン カーソルは、必要に応じて、キーセットに挿入する行のキーを追加できます。 これを行うキーセットドリブン カーソルは、独自の挿入を検出できます。 特定のキーセットドリブン カーソルが独自の挿入を検出するかどうかは、SQLGetInfo の SQL_STATIC_SENSITIVITY オプションを使用して報告されます。

SQL_ATTR_ROW_STATUS_PTR ステートメント属性で指定された行ステータス配列には、任意の行の SQL_ROW_SUCCESS、SQL_ROW_SUCCESS_WITH_INFO、または SQL_ROW_ERROR を含めることができます。 更新、削除、または挿入として検出された行のSQL_ROW_UPDATED、SQL_ROW_DELETED、またはSQL_ROW_ADDEDを返します。

キーセットドリブン カーソルは、一般に、結果セット内の各行のキーを含む一時テーブルを作成することによって実装されます。 カーソルは行が更新されたかどうかも判断する必要があるため、このテーブルには通常、行のバージョン情報を含む列も含まれます。

元の結果セットをスクロールするために、キーセットドリブン カーソルは一時テーブルの上に静的カーソルを開きます。 元の結果セット内の行を取得するには、カーソルは最初に一時テーブルから適切なキーを取得してから、行の現在の値を取得します。 ブロック カーソルを使用する場合、カーソルは複数のキーと行を取得する必要があります。