ODBC 静的カーソル

静的カーソルは、結果セットが静的であるように見えるカーソルです。 通常、カーソルを開いた後に結果セットのメンバーシップ、順序、または値に加えられた変更は検出されません。 たとえば、静的カーソルが行をフェッチした後で、別のアプリケーションによってその行が更新されるものとします。 静的カーソルが行を再フェッチすると、他のアプリケーションによって変更が行われても、静的カーソルが表示する値は変更されません。

静的カーソルは、それ自体の更新、削除、挿入を検出できますが、必ず行う必要はありません。 特定の静的カーソルがこれらの変更を検出したかどうかは、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 を返します。

静的カーソルは、通常、結果セット内の行をロックするか、結果セットのコピーまたはスナップショットを作成することによって実装されます。 行のロックは比較的簡単ですが、コンカレンシーを大幅に減らすという欠点があります。 コピーを作成すると、コンカレンシーが向上し、カーソルはコピーを変更することで、独自の更新、削除、挿入を追跡できます。 ただし、コピーはコストが高く、そのデータが他のユーザーによって変更されるため、基になるデータから逸脱する可能性があります。