最近、カーソルを回避する方法について読みました。さて、私の使い方が適切かどうか知りたいです。
オンラインで動作するスクリプト エンジン (ページに埋め込まれ、サーバー側) を作成しています。このスクリプト エンジンは、この製品の「上級」エンド ユーザーによって使用されます。ただし、この製品はデータベースで非常に重く機能し、スクリプト言語は C に似ていますが、PHP に似ているところまで単純化されています。データベースの場合、基本的にこのような構文が必要です。これは、エンドユーザーが SQL コードを手書きする必要なく、言語内で作成できる最も一貫性のある構文であるためです (そうするつもりなら、なぜ彼らは単にスキップできないのですか?生活をよりシンプルにするためのスクリプトエンジンがあります)。構文は次のようなものです。
declare DataSet $data("tablename","OtherID="+$oid);
//Dataset(string tablename,string where_clause_addon)
$data["field1"]="the data of field... ";
$data.Next();
$data["field1"]="The data of the next row";
$data[10]["field1"]="The data of the 10th row";
これを内部的に制御するには、DataSet ごとにグローバル カーソルを作成し (アプリケーションで 1 つの接続のみを使用します)、グローバル カーソルが現在の行の位置を追跡できるようにします (SCROLL および UPDATE カーソルも同様です)。そうしないと、.Net の厄介な DataReader に対抗するために独自の SQL コントロールを作成する必要が生じるため、これにより私の生活ははるかに簡単になります。
このカーソルの使用法は問題ありませんか? これらのスクリプトを含むページは、世界中からアクセスできるわけではなく、クライアントのみがアクセスできることに注意してください (したがって、一度に 3 ~ 10 人のユーザーしかアクセスできない可能性があります)。
現在の変数の場所を追跡するためのより良い方法を知っている人はいますか? (これらは不明なスキーマのテーブルをアドレス指定できるため)
また、このようなカーソルを使用した同時実行に問題はありますか? (私のドキュメントによると、カーソルは接続に対してグローバルであり、各ページ要求はその場で新しい接続を作成するため、ユーザーは接続を共有していません)