2010-02-01 29 views
7

我們得到了批處理作業中的ORA-00001(違反了唯一約束)。但是,發出COMMIT時發生錯誤,而不是在插入違規記錄時。在COMMITing時獲取ORA-00001(違反唯一約束)?

問題:

  • 怎麼說,唯一約束在COMMIT檢查? (我們可以使用一些設置,以便在INSERT時檢查嗎?)
  • 我們如何才能找出導致違反唯一約束的違規SQL /記錄?

任何幫助表示讚賞!


更多信息/問題:

「攻擊」 的約束被標記爲直接和不可延遲。這可以在交易中被覆蓋嗎?

回答

5

約束可以標記/定義爲可延遲。在這種情況下,約束檢查可以是「立即」或「延遲」。在定義約束條件時,您可以設置默認值/初始值initially immediateinitially deferred。當設置爲deferred時,約束將被執行直到您提交事務。
您可以更改可延遲約束的行爲,例如通過

set constraints all immediate; 

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