Uma restrição exclusiva impõe, bem, singularidade. Ele permitirá valores nulos, ao contrário de uma restrição de chave primária .
Seu erro significa que você está inserindo dados duplicados quando o banco de dados foi configurado para proibir explicitamente isso.
Você pode descobrir quais restrições estão em uma tabela executando a seguinte consulta em todas as restrições . O link decodifica a coluna
CONSTRAINT_TYPE
, por exemplo P
é uma chave primária e U
uma chave única. select *
from all_constraints uc
where uc.table_name = 'MY_TABLE'
and owner = 'DBSCHEMA'
Para descobrir quais colunas estão em uma restrição, use
all_cons_columns
em vez disso, ou combinando os dois em uma consulta: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'
Para qualquer consulta, você pode adicionar a condição adicional
and constraint_name = 'IDX_CO_DETAILS'
para descobrir detalhes da restrição específica que parece estar causando o problema. Seu comentário é um pouco surpreendente por alguns motivos. Mesmo uma restrição criada pelo sistema, por exemplo, uma que foi definida em linha quando a tabela foi criada sem um nome especificado, deve aparecer. Além disso, o nome da restrição
IDX...
implica que é um índice. SE você executar a seguinte consulta, ela deverá informar se o objeto existe no banco de dados:
select *
from all_objects
where object_name = 'IDX_CO_DETAILS'
Eu esperaria que o
OBJECT_TYPE
retornado por esta consulta é 'INDEX'
. Em seguida, a consulta a seguir retornará todos os índices com esse nome, o tipo de índice, a tabela à qual está associado e o proprietário dessa tabela.
select *
from all_indexes
where index_name = 'IDX_CO_DETAILS'
A julgar pelo seu erro, espero que a coluna
UNIQUNESS
retornado por esta consulta é 'UNIQUE'
. Isso deve ajudá-lo a rastrear o objeto.
Você também pode usar o pacote do sistema
dbms_metadata
rastrear o DDL do objeto; tenha cuidado, ele retorna um clob. select dbms_metadata.get_ddl('INDEX','IDX_CO_DETAILS', schema => 'DBSCHEMA')
from dual
o parâmetro
schema
é opcional.