Een unieke beperking dwingt, nou ja, uniciteit. Het zal nulls toestaan, in tegenstelling tot een primaire sleutelbeperking .
Uw fout betekent dat u dubbele gegevens invoert terwijl de database is geconfigureerd om dat expliciet te verbieden.
U kunt erachter komen welke beperkingen gelden voor een tabel door de volgende query uit te voeren op all_constraints
. De link decodeert de kolom CONSTRAINT_TYPE
, bijvoorbeeld P
is een primaire sleutel en U
een unieke sleutel.
select *
from all_constraints uc
where uc.table_name = 'MY_TABLE'
and owner = 'DBSCHEMA'
Gebruik
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'
Aan beide zoekopdrachten kunt u de aanvullende voorwaarde en constraint_name ='IDX_CO_DETAILS'
toevoegen om meer te weten te komen over de specifieke beperking die uw probleem lijkt te veroorzaken.
Uw opmerking is om een aantal redenen een beetje verrassend. Zelfs een door het systeem gecreëerde beperking, bijvoorbeeld een die in-line werd gedefinieerd toen de tabel werd gemaakt zonder dat er een naam werd opgegeven, zou moeten verschijnen. Ook de beperkingsnaam IDX...
impliceert dat het een index is.
ALS u de volgende query uitvoert, zou deze u moeten vertellen of het object in de database bestaat:
select *
from all_objects
where object_name = 'IDX_CO_DETAILS'
Ik zou verwachten dat de OBJECT_TYPE
geretourneerd door deze zoekopdracht is 'INDEX'
.
In het verlengde daarvan zal de volgende query elke index met die naam, het type index, de tabel waaraan deze is gekoppeld en de eigenaar van die tabel retourneren.
select *
from all_indexes
where index_name = 'IDX_CO_DETAILS'
Afgaande op uw fout zou ik verder verwachten dat de kolom UNIQUNESS
geretourneerd door deze zoekopdracht is 'UNIEK'
.
Dit zou u moeten helpen het object op te sporen.
U kunt ook het systeempakket dbms_metadata gebruiken
om de DDL van het object op te sporen; pas op dat het een klomp teruggeeft.
select dbms_metadata.get_ddl('INDEX','IDX_CO_DETAILS', schema => 'DBSCHEMA')
from dual
de parameter schema
is optioneel.