问题描述
大家好
我想在基于另一个列值的列上添加约束?有可能吗?
我有几列的表A ..此表是类型2表,随时有一个活动记录。现在可以从前端应用程序编辑此表。
因此,我们希望列contractornumber应该基于current_flg = 'Y' 是唯一的。这样就不会通过前端应用程序输入重复的值。
没有人可以添加具有相同contractornumber的新行,如果它已经存在,则active flag = 'Y'。
请帮忙
我想在基于另一个列值的列上添加约束?有可能吗?
我有几列的表A ..此表是类型2表,随时有一个活动记录。现在可以从前端应用程序编辑此表。
因此,我们希望列contractornumber应该基于current_flg = 'Y' 是唯一的。这样就不会通过前端应用程序输入重复的值。
没有人可以添加具有相同contractornumber的新行,如果它已经存在,则active flag = 'Y'。
请帮忙
专家解答
您可以利用完全空值没有索引的事实。因此,如果你有一个唯一的索引,只有当电流为Y时才有值,那么你就可以实现你的目标,例如
SQL> create table t 2 ( contract int, 3 current_ind varchar2(1) 4 ); Table created. SQL> SQL> SQL> create unique index ix on t 2 ( case when current_ind = 'Y' then contract end ); Index created. SQL> SQL> SQL> insert into t values (10,'Y'); 1 row created. SQL> insert into t values (11,'Y'); 1 row created. SQL> insert into t values (12,'Y'); 1 row created. SQL> insert into t values (12,null); 1 row created. SQL> insert into t values (12,null); 1 row created. SQL> insert into t values (11,'Y'); insert into t values (11,'Y') * ERROR at line 1: ORA-00001: unique constraint (MCDONAC.IX) violated
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。