batasan unik memaksakan, yah, keunikan. Ini akan memungkinkan nulls, tidak seperti kendala kunci utama .
Kesalahan Anda berarti Anda memasukkan data duplikat ketika database telah dikonfigurasi untuk secara eksplisit melarang hal itu.
Anda dapat mengetahui batasan apa yang ada di tabel dengan menjalankan kueri berikut di semua_kendala
. Tautan menerjemahkan kode kolom CONSTRAINT_TYPE
, misalnya P
adalah kunci utama dan U
kunci unik.
select *
from all_constraints uc
where uc.table_name = 'MY_TABLE'
and owner = 'DBSCHEMA'
Untuk mengetahui kolom apa yang berada dalam batasan, gunakan all_cons_columns
sebagai gantinya, atau gabungkan keduanya menjadi satu kueri:
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'
Untuk salah satu kueri, Anda dapat menambahkan ketentuan tambahan and constraint_name = 'IDX_CO_DETAILS'
untuk mengetahui detail batasan spesifik yang tampaknya menyebabkan masalah Anda.
Komentar Anda sedikit mengejutkan karena beberapa alasan. Bahkan kendala yang dibuat sistem, misalnya yang didefinisikan in-line ketika tabel dibuat tanpa nama yang ditentukan akan muncul. Juga, nama kendala IDX...
menyiratkan bahwa itu adalah indeks.
JIKA Anda menjalankan kueri berikut, kueri ini akan memberi tahu Anda jika objek tersebut ada di database:
select *
from all_objects
where object_name = 'IDX_CO_DETAILS'
Saya berharap bahwa OBJECT_TYPE
dikembalikan oleh kueri ini adalah 'INDEX'
.
Setelah itu, kueri berikut akan mengembalikan setiap indeks dengan nama itu, jenis indeks, tabel yang terkait dengannya, dan pemilik tabel itu.
select *
from all_indexes
where index_name = 'IDX_CO_DETAILS'
Dilihat dari kesalahan Anda, saya selanjutnya berharap bahwa kolom UNIQUNESS
dikembalikan oleh kueri ini adalah 'UNIQUE'
.
Ini akan membantu Anda melacak objek.
Anda juga dapat menggunakan paket sistem dbms_metadata
untuk melacak DDL objek; hati-hati ia mengembalikan gumpalan.
select dbms_metadata.get_ddl('INDEX','IDX_CO_DETAILS', schema => 'DBSCHEMA')
from dual
parameter schema
adalah opsional.