お気づきのように、トリガーでビジネス要件に答えるのは難しいでしょう。その理由は、Oracleが可能性がある 単一のクエリ(並列DML)に対して、同時に複数のスレッドでテーブルを更新/挿入します。これは、更新が行われている間セッションが更新するテーブルをクエリできないことを意味します。 。
トリガーを使用してこれを本当に実行したい場合は、TomKyteによるこの記事に示されている種類のロジック 。ご覧のとおり、それは単純なことではありません。
別の、より単純で、よりエレガントで、保守が容易な方法があります。それは、手順を使用することです。アプリケーションのユーザーに対する更新/挿入の権利を取り消し、アプリケーションが状態列を更新できるようにする一連の手順を記述します。
これらのプロシージャは、親行をロックし(複数のセッションが同じ行のセットを変更するのを防ぐため)、効率的で読みやすく、保守が容易な方法でビジネスロジックを適用します。