0

トリガーの更新前の意味を理解したいです。

DEPT_MSTどこDEPT_IDが主キーであるかというテーブルがあります。DEPT_ID1 と 2 の2 つの行があります。

別のテーブルには主キーとしてEMP列があり、これはテーブルを参照する外部キーです。EMP_IDEMP_DEPT_IDDEPT_IDDEPT

ここで、新しい値がマスターテーブルに存在するかどうかをチェックするEMPテーブル列に before update トリガーを追加すると、新しいテーブルに新しい行が挿入されます。EMP_DEPT_IDEMP_DEPT_IDDEPTDEPT_IDDEPT

ここで、表の 2EMP_DEPT_IDを 3に更新すると、整合性制約違反エラーの親が見つかりません。EMP_DEPT_IDEMP

そう、

  1. これは、オラクルが最初に整合性制約をチェックしてから、「更新前」トリガーを呼び出すことを意味しますか?
  2. では、このチェックをバイパスして、更新トリガーの前に呼び出すにはどうすればよいでしょうか?
  3. ここで「更新前」とは正確にはどういう意味ですか?
  4. 明示的な PL SQL ブロックを使用するのではなく、トリガーを使用して上記の結果を達成するにはどうすればよいですか?

ありがとうございました

4

1 に答える 1

1

はい、遅延されていない外部キー制約は、トリガーが呼び出される前に評価されます。

外部キー制約が遅延可能であると宣言できる場合 (既存の制約が遅延可能でない場合は、削除して再作成する必要があります)

ALTER TABLE emp
  ADD CONSTRAINT fk_emp_dept (emp_dept_id) REFERENCES dept( dept_id )
  INITIALLY DEFERRED DEFERRABLE;

アプリケーションで、制約を遅延可能に設定し、INSERTステートメントを実行してトリガーを起動し、親行を挿入できます。トランザクションがコミットされると、外部キー制約が検証されます。

制約を遅延可能に定義する代わりにemp、たとえば、テーブルの名前を に変更しemp_base、 という名前のビューを作成してから、最初に に挿入してから に挿入するロジックを実装するトリガーをemp作成します。instead of insertempdeptemp_base

于 2015-03-20T19:45:01.140 に答える