全体的なSQLクエリでエラーを処理する方法について質問があります。私たちはOracle PL/SQLを使用しています。私たちのコードベースの大部分は行ごとの処理であり、パフォーマンスが極端に低下します。私が知る限り、その最大の問題は、PL/SQLとSQLエンジン間のコンテキスト切り替えです。ホリスティックSQLクエリ(Oracle PLSQL内)およびUX
問題は、ユーザーが何が問題になったのかわからないということです。データが存在する場合ERRORMSGを示さない場合
- カーソル
- 火SELECT(カウント):オールド・スタイルは次のようになりますERRORMSG表示されていない場合であれば、データは、存在する別のテーブルに
- は、データ
- は、他のいくつかのテーブルを変更することを選択
それは10-20のテーブルのために続くことができます。これは基本的にはCプログラムによく似ています。
UPDATE (
SELECT TAB1.Status,
10 AS New_Status
FROM TAB1
INNER JOIN TAB2 ON TAB1.FieldX = TAB2.FieldX
INNER ..
INNER ..
INNER ..
INNER ..
LEFT ..
LEFT ..
WHERE TAB1.FieldY = 2
AND TAB3.FieldA = 'ABC'
AND ..
AND ..
AND ..
AND ..
) TAB
SET TAB.Status = New_Status
WHERE TAB.Status = 5;
このような全体的なSELECTは、非常に多くの処理を高速化します。私はそのようなクエリをいくつか変更しました。そのものは5時間から3分に下がりましたが、それは人間とのやりとりのないサービスだったので、やや簡単でした。
質問誰かが何らかのフォームを入力して応答を待っているようなものをどうやって処理するのですか?だから何かが間違っていたら、彼らはエラーが必要です。私の心に来た解決策は、行が更新されたかどうかをチェックすることでした。別のコードセクションにジャンプしても、そのエラーを確定するためにすべての単一の選択が行われます。しかし、すべての変更の後、全体選択とすべての単一選択を更新する必要があります。時間がたつと推測され、彼らは異なっていて、より多くの問題につながります。
もう1つの解決策は、1日に100回の呼び出しにつながる一般的なerrormsgであり、50個の変数をクエリに置き換えて、where条件/ joinを実行して、必要な行をフィルタリングした条件を見つけ出します。
ここで、パフォーマンスを得るには適切なアプローチはありますが、やはりユーザーフレンドリーな方法です。現時点では、システムは使えないほど遅いと感じています。ボタンを押すと、しばしば長い時間(通常3〜10秒、さらに複雑な作業では5分)待たなければなりません。
つまり、ユーザー入力に基づいてアプリケーションが実行する複雑な更新ステートメントがあり、0行を更新する可能性があります。この場合、ユーザーにエラーを返す必要があります。彼らが提供したデータにどこに問題があるのかを示します。ユーザーが存在しない情報を入力できる場合、アプリケーションに何らかの検証問題があるように思えるかもしれません。テーブル間に外部キーが存在しますか?情報はアプリケーション側でどのようにキャッシュされますか?私たちはどんな種類のデータとアプリケーションを話していますか? – Boneist
私たちは倉庫管理システムについて話しています。ユーザーがバーコードをスキャンしたばかりの棚番にパレットを置くことを考えてみましょう。その保管庫がロックされているかどうか、その種類の保管庫にそのパレットの種類が許可されているかどうか、特定の物品のみがその棚番に許可されているか、その棚番に収まるパレットの数などが必要です。多くのリアルタイムデータがチェックされるため、多くの他の人が同じデータを扱うので、状態が重要です。 – aLpenbog