2010-02-01 28 views
7

Chúng tôi đang nhận được một ORA-00001 (vi phạm ràng buộc duy nhất) trong một tác vụ hàng loạt. Tuy nhiên, lỗi xảy ra khi một COMMIT được ban hành, không phải tại thời điểm hồ sơ vi phạm được chèn vào.Nhận ORA-00001 (ràng buộc duy nhất bị vi phạm) khi COMMITing?

Câu hỏi:

  • Tại sao là hạn chế duy nhất là kiểm tra tại COMMIT? (Có một số cài đặt chúng tôi có thể sử dụng để kiểm tra xảy ra tại thời điểm INSERT không?)
  • Làm cách nào chúng tôi có thể tìm ra bản ghi/lỗi vi phạm dẫn đến vi phạm ràng buộc duy nhất?

Mọi trợ giúp đều được đánh giá cao!


Thông tin bổ sung/Câu hỏi:

Các "vi phạm" chế được đánh dấu là NGAY và NON-DEFERRABLE. Điều này có thể được ghi đè trong giao dịch không?

Trả lời

5

hạn chế có thể được đánh dấu/định nghĩa là deferrable. Trong trường hợp đó, kiểm tra ràng buộc có thể là "ngay lập tức" hoặc "trì hoãn". Khi xác định ràng buộc, bạn có thể đặt giá trị mặc định/ban đầu, initially immediate hoặc initially deferred. Khi được đặt thành deferred, ràng buộc được thực thi không cho đến khi bạn thực hiện giao dịch.
Bạn có thể thay đổi hành vi của các ràng buộc khó khăn, ví dụ: qua

set constraints all immediate; 

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

Các vấn đề liên quan