2012.07.10号更新重复客商的约束:
1 直接使用alter会报错,因为之前没有使用约束,oracle中已经有了重复的客商
SQL> alter table bd_cubasdoc add constraint one_custname unique(custname); alter table bd_cubasdoc add constraint one_custname unique(custname) ORA-02299: 无法验证 (XMV502.ONE_CUSTNAME) - 找到重复关键字
2,得到itpub版主ZALBB的指示:尝试:先建普通索引,再建唯一性约束,使用先前的普通索引,enable novalidate。
下图在plsql上可视化的创建普通索引
或者
create index ONE_NAME on BD_CUBASDOC (CUSTNAME)
之后使用enable novalidate达到对数据库中已有重复客商的忽略(novalidate:无效)
SQL> alter table bd_cubasdoc add constraint one_custname unique(custname) using index enable novalidate; Table altered
或者
SQL> alter table BD_CUBASDOC add constraint ONE_CUSTNAME unique (CUSTNAME) rely enable novalidate; Table altered
或者
SQL> alter table BD_CUBASDOC add constraint UCNAME unique (CUSTNAME) enable novalidate; Table altered
上面table altered之后,通过查看表或者constraint,发现keys多了一行unique
ps:如果是check约束,会在右边的checks增加一行。
通过,同我的trigger效果一样
下面是oracle后台跑的代码
删除keys中的unique:
alter table BD_CUBASDOC drop constraint ONE_CUSTNAME cascade;
创建时候:
create index ONE_NAME on BD_CUBASDOC (CUSTNAME) tablespace NNC_DATA01 pctfree 10 initrans 2 maxtrans 255 storage ( initial 256K next 256K minextents 1 maxextents unlimited pctincrease 0 );
alter table BD_CUBASDOC add constraint ONE_CUSTNAME unique (CUSTNAME);