Jedinečné omezení prosazuje, no, jedinečnost. Na rozdíl od omezení primárního klíče bude povolovat hodnoty null .
Vaše chyba znamená, že vkládáte duplicitní data, když byla databáze nakonfigurována tak, aby to výslovně zakazovala.
Jaká omezení jsou v tabulce, můžete zjistit spuštěním následujícího dotazu na all_constraints
. Odkaz dekóduje sloupec CONSTRAINT_TYPE
, například P
je primární klíč a U
jedinečný klíč.
select *
from all_constraints uc
where uc.table_name = 'MY_TABLE'
and owner = 'DBSCHEMA'
Chcete-li zjistit, které sloupce jsou v omezení, použijte all_cons_columns
místo toho nebo zkombinováním těchto dvou do jednoho dotazu:
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'
Ke každému dotazu můžete přidat další podmínku and constraint_name = 'IDX_CO_DETAILS'
zjistit podrobnosti o konkrétním omezení, které se zdá být příčinou vašeho problému.
Váš komentář je trochu překvapivý z několika důvodů. Mělo by se zobrazit i omezení vytvořené systémem, například takové, které bylo definováno in-line, když byla tabulka vytvořena, aniž by byl zadán název. Také název omezení IDX...
znamená, že se jedná o index.
POKUD spustíte následující dotaz, měl by vám sdělit, zda objekt v databázi existuje:
select *
from all_objects
where object_name = 'IDX_CO_DETAILS'
Očekával bych, že OBJECT_TYPE
vrácený tímto dotazem je 'INDEX'
.
V návaznosti na to následující dotaz vrátí každý index s tímto názvem, typem indexu, tabulkou, ke které je přidružen, a vlastníkem této tabulky.
select *
from all_indexes
where index_name = 'IDX_CO_DETAILS'
Soudě podle vaší chyby bych dále očekával, že sloupec UNIQUNESS
vrácená tímto dotazem je 'UNIQUE'
.
To by vám mělo pomoci objekt vystopovat.
Můžete také použít systémový balíček dbms_metadata
vystopovat DDL objektu; buďte opatrní, vrátí to kus.
select dbms_metadata.get_ddl('INDEX','IDX_CO_DETAILS', schema => 'DBSCHEMA')
from dual
parametr schema
je volitelné.