0

オラクルのトリガーに問題があります。

私はそのようなものを持っています:

 Project
 -------
 currentProgress
 plannedLoads
 currentLoads


Step
----
currentProgress
plannedLoads
currentLoads


Task
----
currentProgress
plannedLoads
currentLoads

プロジェクトはステップで構成され、ステップはタスクで構成されます。

currentProgress は常に = currentLoads/plannedLoads です。

挿入、更新、または削除時にステップ currentLoads を改善するために、タスクに挿入する前にトリガーがあり、プロジェクトの currentLoads を改善するためにステップ currentLoads にトリガーがあります。

したがって、Task を更新すると 2 つのトリガーが呼び出されます。1 つは Step を更新するため、もう 1 つは Project を更新するためです。

たとえば、Step を更新すると、その currentLoad が更新されます。

問題は、プロジェクトを削除するときです。関連するステップとタスクも削除する必要があります。そのため、タスクのトリガーと削除のステップが呼び出され、プロジェクトのトリガーが呼び出されます。

私は明確であるかどうかわかりません。そうでない場合は、詳細を尋ねてください。

ご協力いただきありがとうございます。

4

1 に答える 1

1

これは、トリガーの理想的なシナリオのようには思えません。アプリケーション ロジックではなく、追加の検証 (つまり、制約ではなく、制約では達成できないこと) / ログ記録 / サニティ チェックなどに使用する方がよいでしょう。

さらに、検証用のトリガーは控えめに、制約とアプリケーションの検証を補完するものとしてのみ使用します。

これらのレコードを維持するための機能を PL/SQL プロシージャに移動し、テーブルに対して DML ステートメントを直接発行する代わりにそれを呼び出すことを強くお勧めします。そうすれば、あなたはコントロールを維持できます。

于 2013-06-16T08:22:08.850 に答える