Eine eindeutige Einschränkung
erzwingt, nun ja, Einzigartigkeit. Im Gegensatz zu einer Primary Key Constraint
Ihr Fehler bedeutet, dass Sie doppelte Daten einfügen, obwohl die Datenbank so konfiguriert wurde, dass dies explizit verboten wird.
Sie können herausfinden, welche Einschränkungen für eine Tabelle gelten, indem Sie die folgende Abfrage auf all_constraints
. Der Link dekodiert die Spalte CONSTRAINT_TYPE
, zum Beispiel P
ist ein Primärschlüssel und U
ein eindeutiger Schlüssel.
select *
from all_constraints uc
where uc.table_name = 'MY_TABLE'
and owner = 'DBSCHEMA'
Um herauszufinden, welche Spalten in einer Einschränkung enthalten sind, verwenden Sie all_cons_columns
stattdessen oder die Kombination der beiden zu einer Abfrage:
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'
Zu jeder Abfrage können Sie die zusätzliche Bedingung and constraint_name = 'IDX_CO_DETAILS'
hinzufügen um Einzelheiten über die spezifische Einschränkung herauszufinden, die Ihr Problem zu verursachen scheint.
Ihr Kommentar ist aus mehreren Gründen etwas überraschend. Sogar eine vom System erstellte Einschränkung, beispielsweise eine, die beim Erstellen der Tabelle ohne Angabe eines Namens inline definiert wurde, sollte angezeigt werden. Auch der Beschränkungsname IDX...
impliziert, dass es sich um einen Index handelt.
Wenn Sie die folgende Abfrage ausführen, sollte sie Ihnen mitteilen, ob das Objekt in der Datenbank vorhanden ist:
select *
from all_objects
where object_name = 'IDX_CO_DETAILS'
Ich würde erwarten, dass der OBJECT_TYPE
zurückgegeben von dieser Abfrage ist 'INDEX'
.
Anschließend gibt die folgende Abfrage jeden Index mit diesem Namen, den Typ des Index, die Tabelle, mit der er verknüpft ist, und den Besitzer dieser Tabelle zurück.
select *
from all_indexes
where index_name = 'IDX_CO_DETAILS'
Nach Ihrem Fehler zu urteilen, würde ich weiterhin erwarten, dass die Spalte UNIQUNESS
von dieser Abfrage zurückgegeben wird, ist 'UNIQUE'
.
Dies sollte Ihnen helfen, das Objekt aufzuspüren.
Sie können auch das Systempaket dbms_metadata
um die DDL des Objekts aufzuspüren; Seien Sie vorsichtig, es gibt einen Clob zurück.
select dbms_metadata.get_ddl('INDEX','IDX_CO_DETAILS', schema => 'DBSCHEMA')
from dual
den Parameter schema
ist optional.