3

トリガーを作成しようとしています:

  create or replace trigger NAME_OF_TRIGGER
  after insert or update on table1
  REFERENCING OLD AS OLD NEW AS NEW
  for each row

テーブルを更新/挿入するときに、必須ではないいくつかのフィールドに自動的に入力します。

これには、table2とtable1(トリガーのサブジェクト)から選択するカーソルを使用する必要があります。

値の一時テーブルや自律型トランザクションを使用せずに、テーブルの変更エラーを回避する方法はありますか?

4

1 に答える 1

10

「値の一時テーブルや自律型トランザクションを使用せずに、テーブルの変更エラーを回避する方法はありますか?」

tl;drno


テーブルの変更エラーは、トリガーを所有するテーブル、または所有するテーブルとの外部キー関係に関係するテーブルをクエリすることによって発生します(少なくとも古いバージョンのデータベースでは、まだ取得しているかどうかはわかりません)。

適切に設計されたアプリケーションでは、これは必要ありません。これが、多くの人がテーブルの変更を不十分なデータモデリングの指標と見なしている理由です。たとえば、突然変異はしばしば不十分な正規化と関連しています。


ジェイミー・ザウィンスキーを言い換えると、変化するテーブルの例外に直面したときに、「わかっています。自律型トランザクションを使用します」と考える人もいます。今、彼らは2つの問題を抱えています。


BEFORE INSERT OR UPDATEトリガーの:NEW値を変更するか、仮想列を使用することで、エラーを回避できる場合があります。ただし、これらが当てはまるかどうかを確認するには、詳細を投稿する必要があります。

ただし、最善の回避策は、他の種類を必要としないことです。

于 2011-08-02T16:53:48.593 に答える