我试图在 Oracle 中使用唯一索引强制每个客户端只使用一个活动电话,但无法使其正常工作。这在 PostgreSQL 和 DB2 中完美无缺,但在 Oracle 中似乎不起作用。
示例如下:
create table phone (
client_id number(6) not null,active number(1) not null check (active in (0,1)),value varchar2(15)
);
insert into phone (client_id,active,value) values (10,'1111');
insert into phone (client_id,1,'3333');
insert into phone (client_id,value) values (15,'5555');
insert into phone (client_id,'6666');
insert into phone (client_id,'7777'); -- offending row
当我尝试创建索引时:
create unique index ix1 on phone (client_id,case when active = 1 then active end);
似乎Oracle不喜欢它,因为重复的索引条目:
错误:ORA-01452:无法创建唯一索引;发现重复键
SQLState: 72000
如果我删除有问题的数据行,则可以创建索引。