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.