设为首页 - 加入收藏 PHP编程网 - PHP站长网 (http://www.52php.cn)- 电商,百科,编程,业界,移动互联,5G,云计算,站长网!
热搜: google 娱乐 服务 百度
当前位置: 首页 > 站长百科 > 正文

database – oracle中的条件唯一约束

发布时间:2021-01-16 16:13 所属栏目:[站长百科] 来源:网络整理
导读:我目前已将此约束添加到表MY_TABLE中 ALTER TABLE MY_TABLE ADD CONSTRAINT MY_TABLE_UNQ_01 UNIQUE(COLUMN1,COLUMN2,COLUMN3)使用INDEX TABLESPACE“MY_TABLE_INDEX”; 问题是我添加了一个新列: ALTER TABLE MY_TABLE ADD(草案编号(1,0)); 现在,仅当列DR

我目前已将此约束添加到表MY_TABLE中

ALTER TABLE MY_TABLE ADD CONSTRAINT MY_TABLE_UNQ_01 UNIQUE(COLUMN1,COLUMN2,COLUMN3)使用INDEX TABLESPACE“MY_TABLE_INDEX”;

问题是我添加了一个新列:

ALTER TABLE MY_TABLE ADD(草案编号(1,0));

现在,仅当列DRAFT = 0时,约束才适用

有什么方法可以做到这一点?

解决方法

在11g中,您可以在虚拟列上定义约束:

ALTER TABLE my_table ADD (
   draft_column1 <DATATYPE> GENERATED ALWAYS AS (DECODE(draft,column1)),draft_column2 <DATATYPE> GENERATED ALWAYS AS (DECODE(draft,column2)),draft_column3 <DATATYPE> GENERATED ALWAYS AS (DECODE(draft,column3)),CONSTRAINT UNQ_02 UNIQUE(draft_column1,draft_column2,draft_column3)
);

在10g及之前,您可以使用基于函数的唯一索引以及不记录所有NULL索引条目的事实.因此,只有当draft = 0时,以下索引才能保证单一性:

CREATE UNIQUE INDEX UNQ_03 ON my_table (
   DECODE(draft,column1),DECODE(draft,column2),column3)
);

【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

推荐文章
热点阅读