我正在尝试UNIQUE KEY通过设置添加具有重复记录的先前存在的表ENABLE NOVALIDATE。
但我越来越 ORA-02299: cannot validate (my_owner.my_key_UK ) - duplicate keys found
ALTER TABLE my_owner.my_table
ADD CONSTRAINT my_key_UK UNIQUE (ID1,ID2)
ENABLE NOVALIDATE;
Run Code Online (Sandbox Code Playgroud)
唯一约束使用索引来强制执行 noduplicates 规则。默认情况下,它将创建一个唯一索引(有意义吗?)。正是这个索引创建正在抛出ORA-02299。
但是,如果这是受约束列上的现有索引,则约束将使用该索引。好消息是,索引不需要是唯一的约束来使用它。
所以你需要做的是先建立一个非唯一索引:
create index whatever_idx on my_table (ID1,ID2);
Run Code Online (Sandbox Code Playgroud)
然后你将能够创建你的约束:
ALTER TABLE my_owner.my_table
ADD CONSTRAINT my_key_UK UNIQUE (ID1,ID2)
ENABLE NOVALIDATE;
Run Code Online (Sandbox Code Playgroud)
您可以通过查询数据字典来检查这一点:
select uc.constraint_name
, uc.constraint_type
, uc.index_name
, ui.uniqueness as idx_uniqueness
from user_constraints uc
join user_indexes ui
on ui.index_name = uc.index_name
where uc.table_name = 'MY_TABLE'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16394 次 |
| 最近记录: |