Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Oracle JDBC:Làm thế nào để biết hàng nào đưa ra ràng buộc khóa duy nhất?

Cách duy nhất (tôi biết) để tìm ra hàng nào gây ra sự cố là sử dụng tính năng "đăng nhập lỗi vào" của Oracle. Bằng cách đó, insert sẽ không đưa ra ngoại lệ và bất kỳ hàng nào vi phạm bất kỳ ràng buộc nào sẽ được ghi vào bảng lỗi được chỉ định.

Để làm điều đó, trước tiên bạn cần tạo một bảng nhật ký chứa các hàng bị từ chối:

EXECUTE DBMS_ERRLOG.CREATE_ERROR_LOG('BD_VEHICLES_TEMP');

Điều đó sẽ tạo một bảng có tên ERR$_BD_VEHICLES_TEMP

Sau đó chạy thay đổi câu lệnh của bạn thành sau:

insert into bd_vehicles_temp 
select * 
from bd_vehicles_temp_1
LOG ERRORS REJECT LIMIT UNLIMITED;

Câu lệnh sẽ tiếp tục ngay cả khi một hàng không xác thực được các ràng buộc. Sau khi câu lệnh kết thúc, bạn có thể kiểm tra nội dung của bảng ERR$_BD_VEHICLES_TEMP cho các hàng vi phạm một ràng buộc bao gồm thông báo lỗi và các giá trị.

(Chỉnh sửa):Nếu bạn muốn dừng ở lỗi đầu tiên (và xem điều đó trong bảng nhật ký), hãy bỏ đi REJECT LIMIT UNLIMITED mệnh đề.

Thông tin chi tiết có trong sách hướng dẫn:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. làm thế nào để chỉ chọn hàng có trình tự tối đa mà không sử dụng truy vấn con?

  2. Tách kết quả truy vấn sau khi tải XML bằng fn:string-join trong bảng Oracle

  3. Trả về các hàng có chứa giá trị số trong Oracle

  4. SQL:Tìm kiếm danh sách các cột với một giá trị nhất định (trong một hàng)

  5. org.hibernate.MappingException:Không có ánh xạ phương ngữ cho loại JDBC:2002