Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.
value-sensitive カーソルは、メンバーシップに対しては感知せず、結果セットの順序と値に対しては感知します。
value-sensitive カーソルは、読み取り専用か更新可能なカーソルタイプで使用されます。
value-sensitive カーソルは、ISO/ANSI 規格の定義に対応していません。このカーソルは、ODBC キーセット駆動型カーソルに対応します。
変更した基本のローで構成されているローをアプリケーションがフェッチすると、そのアプリケーションは更新された値を表示します。また、SQL_ROW_UPDATED ステータスがアプリケーションに発行されます。削除された基本のローで構成されているローをアプリケーションがフェッチした場合は、SQL_ROW_DELETED ステータスがアプリケーションに発行されます。
プライマリキー値に加えられた変更によって、結果セットからローが削除されます (削除として処理され、その後、挿入が続きます)。カーソルまたは外部から結果セットのローが削除されると、特別のケースが発生し、同じキー値を持つ新しいキーが挿入されます。この結果、新しいローと、それが表示されていた古いローが置き換えられます。
結果セットのローが、クエリの選択内容や順序指定に一致するという保証はありません。ローのメンバーシップは開かれた時に固定であるため、ローが変更されて WHERE 句または ORDER BY 句と一致しなくなっても、ローのメンバーシップと位置はいずれも変更されません。
どの値にも、カーソルを使用して行われた変更に対する感知性があります。カーソルを使用して行われた変更に対するメンバーシップの感知性は、ODBC オプションの SQL_STATIC_SENSITIVITY によって制御されます。このオプションが ON になっている場合は、カーソルを使った挿入によってそのカーソルにローが追加されます。それ以外の場合は、結果セットに挿入は含まれません。カーソルを使って削除すると、結果セットからローが削除され、SQL_ROW_DELETED ステータスを返すホールは回避されます。
value-sensitive カーソルは「キーセットテーブル」を使用します。カーソルが開かれている場合は、SQL Anywhere が、結果セットを構成する各ローの識別情報をワークテーブルに入力します。結果セットをスクロールする場合、結果セットのメンバーシップを識別するためにキーセットテーブルが使用されますが、値は必要に応じて基本のテーブルから取得されます。
value-sensitive カーソルのメンバーシッププロパティは固定であるため、アプリケーションはカーソル内のローの位置を記憶でき、これらの位置が変更されないことが保証されます。カーソル感知性の例:削除されたローを参照してください。
ローが更新されたか、カーソルが開かれた後に更新された可能性がある場合、SQL Anywhere は、ローがフェッチされた時点で SQLE_ROW_UPDATED_WARNING を返します。警告が生成されるのは 1 回だけです。同じローをもう一度フェッチしても、警告は生成されません。
更新されたカラムがカーソルによって参照されていなくても、任意のカラムを更新すると警告の原因となります。たとえば、Surname と GivenName に対するカーソルは、Birthdate カラムだけが修正された場合でも更新の内容をレポートします。これらの更新警告とエラー条件は、バルクオペレーションモード (-b データベースサーバーオプション) でローのロックが解除されている場合は発生しません。バルクオペレーションのパフォーマンスの側面と最後に読み込まれた後で、ローは更新されています。を参照してください。
前回フェッチした後に修正されたローで位置付け UPDATE 文または DELETE 文の実行を試みると、SQLE_ROW_UPDATED_SINCE_READ エラーが返されて、その文はキャンセルされます。アプリケーションでもう一度ローをフェッチすると UPDATE または DELETE が許可されます。
更新されたカラムがカーソルによって参照されていなくても、任意のカラムを更新するとエラーの原因となります。バルクオペレーションモードでは、エラーは発生しません。最後に読み込まれた後で、ローは更新されています。操作はキャンセルされました。を参照してください。
カーソルが開かれた後にカーソルまたは別のトランザクションからローを削除した場合は、カーソルに「ホール」が作成されます。カーソルのメンバーシップは固定なので、ローの位置は予約されています。ただし、DELETE オペレーションは、変更されたローの値に反映されます。このホールでローをフェッチすると、現在のローがないことを示す -197 SQLCODE エラーが返され、カーソルはホールの上に配置されたままになります。sensitive カーソルを使用するとホールを回避できます。sensitive カーソルのメンバーシップは値とともに変化するからです。カーソルの現在のローがありません。を参照してください。
value-sensitive カーソル用にローをプリフェッチすることはできません。この要件は、パフォーマンスに影響を及ぼすことがあります。
複数のローを value-sensitive カーソルを介して挿入する場合、新しいローは結果セットの最後に表示されます。ローの修正に使用するカーソルを参照してください。