sql – Oracle:基于函数的索引选择唯一性
发布时间:2020-12-12 06:58:26 所属栏目:MsSql教程 来源:网络整理
导读:我必须保留历史记录,所以我使用的是is_deleted列,它可以有’Y’或’N’.但对于任何is_deleted’N’的实例,我应该为(a,b,c)复合列提供unwue条目. 当我尝试创建基于函数的唯一索引时,我收到错误. CREATE UNIQUE INDEX fn_unique_idx ON table1 (CASE WHEN is_de
我必须保留历史记录,所以我使用的是is_deleted列,它可以有’Y’或’N’.但对于任何is_deleted’N’的实例,我应该为(a,b,c)复合列提供unwue条目.
当我尝试创建基于函数的唯一索引时,我收到错误. CREATE UNIQUE INDEX fn_unique_idx ON table1 (CASE WHEN is_deleted='N' then (id,name,type) end); 第1行的错误: 请帮忙. 谢谢 解决方法你需要类似的东西CREATE UNIQUE INDEX fn_unique_idx ON table1 (CASE WHEN is_deleted='N' THEN id ELSE null END,CASE WHEN is_deleted='N' THEN name ELSE null END,CASE WHEN is_deleted='N' THEN type ELSE null END); 行动中的约束的一个例子 SQL> create table table1 ( 2 id number,3 name varchar2(10),4 type varchar2(10),5 is_deleted varchar2(1) 6 ); Table created. SQL> CREATE UNIQUE INDEX fn_unique_idx 2 ON table1 (CASE WHEN is_deleted='N' THEN id ELSE null END,3 CASE WHEN is_deleted='N' THEN name ELSE null END,4 CASE WHEN is_deleted='N' THEN type ELSE null END); Index created. SQL> insert into table1 values( 1,'Foo','Bar','N' ); 1 row created. SQL> insert into table1 values( 1,'Y' ); 1 row created. SQL> insert into table1 values( 1,'N' ); insert into table1 values( 1,'N' ) * ERROR at line 1: ORA-00001: unique constraint (SCOTT.FN_UNIQUE_IDX) violated SQL> insert into table1 values( 1,'Zee','N' ); 1 row created. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |