Un vincolo unico impone, beh, l'unicità. Consentirà null, a differenza di un vincolo di chiave primaria .
Il tuo errore significa che stai inserendo dati duplicati quando il database è stato configurato per proibirlo esplicitamente.
Puoi scoprire quali vincoli sono presenti su una tabella eseguendo la query seguente su tutti i_vincoli
. Il link decodifica la colonna CONSTRAINT_TYPE
, ad esempio P
è una chiave primaria e U
una chiave univoca.
select *
from all_constraints uc
where uc.table_name = 'MY_TABLE'
and owner = 'DBSCHEMA'
Per scoprire quali colonne sono in un vincolo, utilizzare all_cons_columns
invece, o combinando i due in un'unica query:
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'
Ad entrambe le query puoi aggiungere la condizione aggiuntiva and constraint_name = 'IDX_CO_DETAILS'
per scoprire i dettagli del vincolo specifico che sembra causare il tuo problema.
Il tuo commento è un po' sorprendente per un paio di motivi. Anche un vincolo creato dal sistema, ad esempio uno che è stato definito in linea quando è stata creata la tabella senza specificare un nome, dovrebbe essere visualizzato. Inoltre, il nome del vincolo IDX...
implica che sia un indice.
SE esegui la seguente query, dovrebbe dirti se l'oggetto esiste nel database:
select *
from all_objects
where object_name = 'IDX_CO_DETAILS'
Mi aspetto che il OBJECT_TYPE
restituito da questa query è 'INDEX'
.
Successivamente la query seguente restituirà ogni indice con quel nome, il tipo di indice, la tabella a cui è associato e il proprietario di quella tabella.
select *
from all_indexes
where index_name = 'IDX_CO_DETAILS'
A giudicare dal tuo errore, mi aspetterei ulteriormente che la colonna UNIQUNESS
restituito da questa query è 'UNIQUE'
.
Questo dovrebbe aiutarti a rintracciare l'oggetto.
Puoi anche utilizzare il pacchetto di sistema dbms_metadata
per rintracciare il DDL dell'oggetto; fai attenzione, restituisce una palla.
select dbms_metadata.get_ddl('INDEX','IDX_CO_DETAILS', schema => 'DBSCHEMA')
from dual
il parametro schema
è facoltativo.