リレーショナル データベースの操作は、行の完全なセットに作用します。 SELECT ステートメントによって返される行のセットは、ステートメントの WHERE 句の条件を満たすすべての行で構成されます。 ステートメントによって返されるこの行の完全なセットは、結果セットと呼ばれます。 アプリケーション、特に対話型およびオンラインのアプリケーションは、結果セット全体を 1 つの単位として常に効果的に機能させることはできません。 これらのアプリケーションには、一度に 1 つの行または小さな行ブロックを操作するメカニズムが必要です。 カーソルは、そのメカニズムを提供する結果セットの拡張機能です。
カーソルはカーソル ライブラリによって実装されます。 カーソル ライブラリはソフトウェアであり、多くの場合、データベース システムまたはデータ アクセス API の一部として実装され、データ ソース (結果セット) から返されるデータの属性を管理するために使用されます。 これらの属性には、コンカレンシー管理、結果セット内の位置、返される行の数、結果セットを前後に移動できるかどうか (またはその両方) が含まれます (スクロール可能性)。
カーソルは結果セット内の位置を追跡し、元のテーブルに戻るかどうかにかかわらず、結果セットに対して行ごとに複数の操作を実行できます。 言い換えると、カーソルは概念的には、データベース内のテーブルに基づいて結果セットを返します。 カーソルの名前は、コンピューター画面上のカーソルが現在の位置を示すのと同じように、結果セット内の現在の位置を示しているためです。
カーソルの概念を理解してから、ADO での使用の詳細を学習することが重要です。
カーソルを使用すると、次のことができます。
結果セット内の特定の行での配置を指定します。
現在の結果セットの位置に基づいて、1 行または 1 行のブロックを取得します。
結果セット内の現在の位置にある行のデータを変更します。
他のユーザーによって行われたデータ変更に対する異なるレベルの感度を定義します。
たとえば、潜在的な購入者に利用可能な製品の一覧を表示するアプリケーションを考えてみましょう。 購入者は一覧をスクロールして製品の詳細とコストを確認し、最後に購入する製品を選択します。 リストの残りの部分では、追加のスクロールと選択が行われます。 購入者に関する限り、製品は一度に 1 つずつ表示されますが、アプリケーションはスクロール可能なカーソルを使用して結果セットを上下に参照します。
カーソルは、さまざまな方法で使用できます。
行が全くない。
1 つのテーブル内のいくつかまたはすべての行が含まれる場合。
論理的に結合されたテーブルの行の一部またはすべてが含まれます。
カーソルまたはフィールド レベルで、読み取り専用か更新可能かを設定します。
前方スクロールのみ、または完全にスクロール可能。
カーソル キーセットがサーバー上にあります。
他のアプリケーション (メンバーシップ、並べ替え、挿入、更新、削除など) によって発生する基になるテーブルの変更に依存します。
サーバーまたはクライアントのいずれかに存在します。
読み取り専用カーソルは、ユーザーが結果セットを参照するのに役立ち、読み取り/書き込みカーソルは個々の行の更新を実装できます。 複雑なカーソルは、ベース テーブル行を指すキーセットを使用して定義できます。 一部のカーソルは前方方向に読み取り専用ですが、他のカーソルは前後に移動し、他のアプリケーションがデータベースに対して行っている変更に基づいて結果セットを動的に更新できます。
すべてのアプリケーションがカーソルを使用してデータにアクセスまたは更新する必要があるわけではありません。 一部のクエリでは、カーソルを使用して行を直接更新する必要はありません。 カーソルは、データを取得するために選択した最後の手法の 1 つである必要があります。次に、可能な限り影響が最も低いカーソルを選択する必要があります。 ストアド プロシージャを使用して結果セットを作成する場合、カーソル編集または更新メソッドを使用して結果セットを更新することはできません。
並行 処理
一部のマルチユーザー アプリケーションでは、エンド ユーザーに提示されるデータが可能な限り最新であることが非常に重要です。 このようなシステムの典型的な例は、多くのユーザーが特定のフライト (したがって、1 つのレコード) で同じ座席を争う航空会社の予約システムです。 このような場合、アプリケーションの設計では、1 つのレコードに対する同時実行操作を処理する必要があります。
他のアプリケーションでは、コンカレンシーは重要ではありません。 このような場合、常にデータを最新の状態に保つために必要な費用を正当化することはできません。
立場
カーソルは、結果セット内の現在の位置も追跡します。 カーソル位置は、配列インデックスが配列内の特定の位置にある値を指すのと同様に、現在のレコードへのポインターと考えてください。
スクロール可能性
アプリケーションで使用されるカーソルの種類は、結果セット内の行を前後に移動する機能にも影響します。これはスクロール可能性と呼ばれることもあります。 結果セットを通じて と を前に進める機能により、カーソルの複雑さが増し、実装コストが高くなります。 このため、必要な場合にのみ、この機能を持つカーソルを要求する必要があります。