为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:
【操作系统】:
【CPU】:
【问题描述】*:当唯一性索引包含虚拟列,如按以下语句建表, 使用IGNORE_ROW_ON_DUPKEY_INDEX会报错
create table t1(c1 int, c2 int, c3 int, c4 int,c5 int generated always as (c4 + 1) virtual);
create unique index t1i1 on t1(c5,c1);
insert into t1(c1,c2,c3,c4) values (1,2,1,1);
insert /*+IGNORE_ROW_ON_DUPKEY_INDEX(t1(c5,c1))*/ into t1(c1,c2,c3,c4) values (1,2,1,1); -- 报错 HINT参数IGNORE_ROW_ON_DUPKEY_INDEX所指定的列无法唯一确定目标UNIQUE索引
insert /*+IGNORE_ROW_ON_DUPKEY_INDEX(t1)*/ into t1(c1,c2,c3,c4) values (1,2,1,1);-- 报错 违反表[t1]唯一性约束条件[t1i1]
相当于一个函数索引,无法定位

测试了下,如果唯一索引是创建在物理列上,IGNORE_ROW_ON_DUPKEY_INDEX 是有效的,而表达式计算列不行。
我猜测跟表达式计算列(虚拟列)的计算结果并未实际存储有关。
