スクロール可能なカーソル

最新の画面ベースのアプリケーションでは、ユーザーはデータを前後にスクロールします。 このようなアプリケーションでは、以前にフェッチされた行に戻ることが問題になります。 1つの方法として、カーソルを閉じて再度開き、カーソルが必要な行に到達するまで行をフェッチすることができます。 別の方法として、結果セットを読み取り、ローカルでキャッシュして、アプリケーションにスクロールを実装することもできます。 どちらの場合も、小さい結果セットを使用した場合にのみ機能します。後者の可能性は実装が困難です。 より良い解決策は、スクロール可能な カーソル を使用することです。これは、結果セット内で前後に移動できます。

スクロール可能な カーソル は、ユーザーがデータを前後にスクロールする、最新の画面ベースのアプリケーションでよく使用されます。 ただし、スクロール可能なカーソルの方が順方向専用カーソルよりも一般的に高価であるため、アプリケーションでは、順方向専用カーソルがジョブを実行しない場合にのみ、スクロール可能なカーソルを使用する必要があります。

後方に移動する機能により、順方向専用カーソルには該当しない質問が発生します。以前にフェッチした行に対する変更がスクロール可能なカーソルによって検出されたかどうか。 つまり、更新、削除、および新しく挿入された行を検出する必要がありますか。

この質問が発生するのは、結果セットの定義 (特定の条件に一致する行のセット) が、その条件に一致するかどうかを確認する行がチェックされたとき、または行がフェッチされるたびに同じデータが含まれている必要があるかどうかがわからないためです。 前者を省略すると、スクロール可能なカーソルによって行が挿入または削除されたかどうかを検出でき、後者では更新されたデータを検出できるようになります。

変更を検出する機能は、場合によっては役に立たないことがあります。 たとえば、会計アプリケーションには、すべての変更を無視するカーソルが必要です。カーソルに最新の変更が表示されている場合、ブックの分散は不可能です。 一方、航空会社の予約システムには、データに対する最新の変更を示すカーソルが必要です。このようなカーソルがない場合は、データベースを継続的に再クエリして、最新のフライトの可用性を示す必要があります。

ODBC では、さまざまなアプリケーションのニーズに対応するために、4種類のスクロール可能なカーソルを定義しています。 これらのカーソルは、費用と、結果セットへの変更を検出する機能の両方で異なります。 スクロール可能なカーソルが行への変更を検出できる場合は、それらの行を再フェッチしようとしたときにのみ検出されることに注意してください。現在フェッチされている行への変更をデータソースがカーソルに通知する方法はありません。 変更の表示もトランザクション分離レベルによって制御されることに注意してください。詳細については、「 トランザクション分離」を参照してください。

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