1 创建原始表及数据SQL> create table t1(id number, name varchar2(20));Table createdSQL> insert into t1 values(1,"A");1 row insertedSQL> insert into t1 values(1,"B");1 row insertedSQL> insert into t1 values(2,"C");1 row insertedSQL> insert into t1 values(3,"D");1 row insertedSQL> insert into t1 values(3,"E");1 row insertedSQL> insert into t1 values(4,"F");1 row insertedSQL> commit;Commit complete
2 在表上创建enable novalidate主键SQL> alter table t1 add constraint pk_t1 primary key(id) enable novalidate;Table altered
3 尝试将约束状态更改为 enable validate,却发现原有数据有问题SQL> alter table t1 enable validate constraint pk_t1;alter table t1 enable validate constraint pk_t1ORA-02437: 无法验证 (MYHR.PK_T1) - 违反主键
4 找出违反约束的数据,这里采用Exceptions表保存异常数据SQL> @%Oracle_HOME%RDBMS/ADMIN/utlexpt1.sql;Table createdSQL> alter table t1 enable validate constraint pk_t1 exceptions into exceptions;alter table t1 enable validate constraint pk_t1 exceptions into exceptionsORA-02437: 无法验证 (MYHR.PK_T1) - 违反主键
5 根据异常表,找出对应源表中的异常数据SQL> select id, name from t1 where rowid in(select row_id from exceptions); ID NAME---------- -------------------- 1 A 1 B 3 D 3 E
6 修正异常数据后,将索引生效Oracle约束的关键字Enable/Disable/Validate/NovalidateOracle约束支持3种Delete的行为相关资讯 Oracle数据库 Oracle入门教程 oracle数据库教程
- Oracle数据库全球化 (03月01日)
- Oracle数据库日期过滤方法性能比较 (02/02/2015 13:20:26)
- Oracle数据库安装中端口被占用问题 (10/29/2014 07:42:24)
| - 在CentOS 6.6上搭建C++运行环境并 (10/10/2015 19:44:40)
- Oracle数据库无法使用localhost和 (11/14/2014 16:39:10)
- 使用SQLT来构建Oracle测试用例 (08/28/2014 06:17:41)
|
本文评论 查看全部评论 (0)