7

バッチ ジョブで ORA-00001 (一意の制約違反) が発生しています。ただし、問題のあるレコードが挿入されたときではなく、COMMIT が発行されたときにエラーが発生します。

質問:

  • COMMIT でユニーク制約がチェックされるのはなぜですか? (INSERT 時にチェックが行われるように使用できる設定はありますか?)
  • 一意の制約違反につながる問題のある SQL/レコードを見つけるにはどうすればよいでしょうか?

どんな助けでも大歓迎です!


追加情報/質問:

「問題のある」制約は、IMMEDIATE および NON-DEFERRABLE としてマークされます。これはトランザクションでオーバーライドできますか?

4

2 に答える 2

5

制約は、遅延可能としてマーク/定義できます。その場合、制約チェックは「即時」または「遅延」のいずれかになります。制約を定義するときに、デフォルト/初期値initially immediateまたはを設定できますinitially deferred。制約に設定するとdeferred、トランザクションをコミットするまで適用されません。
たとえば、遅延可能な制約の動作を変更できます

set constraints all immediate;

参照: http://www.oracle.com/technology/oramag/oracle/03-nov/o63asktom.html

于 2010-02-01T10:52:17.980 に答える
3

制約は遅延として定義できます。つまり、データ変更時ではなく、コミット時にチェックされます。次の 2 つのリンクを参照してください。

http://www.oracle-base.com/articles/8i/ConstraintCheckingUpdates.php

http://www.oracle.com/technology/oramag/oracle/03-nov/o63asktom.html

それが役に立てば幸い

于 2010-02-01T10:51:51.413 に答える