一意の制約 まあ、独自性を強制します。 主キー制約<とは異なり、nullを許可します。 / a> 。
エラーは、データベースが明示的に禁止するように構成されている場合に、重複データを挿入していることを意味します。
all_constraints
。リンクは列CONSTRAINT_TYPE
をデコードします 、たとえば P
主キーであり、 U
一意のキー。
select *
from all_constraints uc
where uc.table_name = 'MY_TABLE'
and owner = 'DBSCHEMA'
制約内の列を確認するには、<を使用します。 code> all_cons_columns 代わりに、または2つを1つのクエリに結合します:
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'
どちらのクエリにも、条件とconstraint_name ='IDX_CO_DETAILS'
を追加できます。 問題を引き起こしていると思われる特定の制約の詳細を見つけるため。
あなたのコメントはいくつかの理由で少し驚くべきものです。たとえば、名前を指定せずにテーブルを作成したときにインラインで定義された制約など、システムで作成された制約も表示されます。また、制約名 IDX ...
インデックスであることを意味します。
次のクエリを実行すると、オブジェクトがデータベースに存在するかどうかがわかります。
select *
from all_objects
where object_name = 'IDX_CO_DETAILS'
OBJECT_TYPE
このクエリによって返されるのは'INDEX'
です。 。
その後、次のクエリは、その名前、インデックスのタイプ、関連付けられているテーブル、およびそのテーブルの所有者を持つすべてのインデックスを返します。
select *
from all_indexes
where index_name = 'IDX_CO_DETAILS'
あなたのエラーから判断すると、列 UNIQUNESS
このクエリによって返されるのは'UNIQUE'
です。 。
これは、オブジェクトを追跡するのに役立ちます。
システムパッケージdbms_metadataを使用することもできます。
オブジェクトのDDLを追跡します。塊を返すことに注意してください。
select dbms_metadata.get_ddl('INDEX','IDX_CO_DETAILS', schema => 'DBSCHEMA')
from dual
パラメータschema
オプションです。