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

Ngoại lệ Vi phạm Ràng buộc ORA-00001

ràng buộc duy nhất thực thi, tốt, tính duy nhất. Nó sẽ cho phép null, không giống như ràng buộc khóa chính .

Lỗi của bạn có nghĩa là bạn đang chèn dữ liệu trùng lặp khi cơ sở dữ liệu đã được định cấu hình để ngăn cấm điều đó một cách rõ ràng.

Bạn có thể tìm hiểu những ràng buộc nào trên bảng bằng cách chạy truy vấn sau trên all_constraints . Liên kết giải mã cột CONSTRAINT_TYPE , ví dụ:P là khóa chính và U một khóa duy nhất.

select *
  from all_constraints uc
 where uc.table_name = 'MY_TABLE'
   and owner = 'DBSCHEMA'

Để tìm hiểu những cột nào trong một ràng buộc, hãy sử dụng all_cons_columns thay vào đó, hoặc kết hợp cả hai thành một truy vấn:

select uc.*, ucc.column_name, ucc.position
  from all_constraints uc
  join all_cons_columns ucc
    on uc.owner = ucc.owner
   and uc.table_name = ucc.table_name
   and uc.constraint_name = ucc.constraint_name
 where uc.table_name = 'MY_TABLE'
   and uc.owner = 'DBSCHEMA'

Đối với một trong hai truy vấn, bạn có thể thêm điều kiện bổ sung and constraint_name = 'IDX_CO_DETAILS' để tìm hiểu chi tiết về ràng buộc cụ thể dường như đang gây ra sự cố của bạn.

Nhận xét của bạn là một chút ngạc nhiên vì một vài lý do. Ngay cả một hệ thống đã tạo ràng buộc, chẳng hạn như một ràng buộc được xác định trong dòng khi bảng được tạo mà không có tên được chỉ định cũng sẽ hiển thị. Ngoài ra, tên ràng buộc IDX... ngụ ý rằng đó là một chỉ mục.

NẾU bạn chạy truy vấn sau, nó sẽ cho bạn biết liệu đối tượng có tồn tại trong cơ sở dữ liệu hay không:

select *
  from all_objects
 where object_name = 'IDX_CO_DETAILS'

Tôi mong đợi rằng OBJECT_TYPE được trả về bởi truy vấn này là 'INDEX' .

Tiếp theo từ đó truy vấn sau sẽ trả về mọi chỉ mục có tên đó, loại chỉ mục, bảng mà nó được liên kết và chủ sở hữu của bảng đó.

select *
  from all_indexes
 where index_name = 'IDX_CO_DETAILS'

Đánh giá lỗi của bạn, tôi còn mong đợi rằng cột UNIQUNESS được trả về bởi truy vấn này là 'UNIQUE' .

Điều này sẽ giúp bạn theo dõi đối tượng.

Bạn cũng có thể sử dụng gói hệ thống dbms_metadata để theo dõi DDL của đối tượng; hãy cẩn thận nó trả về một cục máu đông.

select dbms_metadata.get_ddl('INDEX','IDX_CO_DETAILS', schema => 'DBSCHEMA') 
  from dual

tham số schema là tùy chọ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. Oracle Managed ODP.NET không thể tìm thấy tnsnames.ora

  2. Oracle tạo danh sách các ngày trong tuần IW

  3. làm thế nào để lấy PL / SQL trong SQLFiddle?

  4. Hibernate ánh xạ hai bảng thành một lớp

  5. thêm tháng vào SQL ngày tháng