使用exception来查找重复的数据
2006-01-08 19:25
381 查看
今天建一个unique索引失败,找到了重复的值。
1.首先用下面的sql语句创建
create unique index IND_AB08_AAE140_AAE002_AAE003 on AB08 (AAE140, AAE002, AAE003, AAB001, AAC001, AAE143, AAA060, AAA070) tablespace ts_hmsimis_ind_a ;
重复ORA-02299: 无法验证 (HMSIMIS.IND_AB08_AAE140_AAE002_AAE003) - 找到重复关键字
2.换一种方法创建这个唯一索引
ALTER TABLE ab08 ADD CONSTRAINT IND_AB08_AAE140_AAE002_AAE003 UNIQUE (AAE140, AAE002, AAE003, AAB001, AAC001, AAE143, AAA060, AAA070) using index tablespace ts_hmsimis_ind_a;
一样出现无法验证找到重复关键字的错误。
3.通过exceptions来查找重复的值
首先创建一个异常表 :
create table except_ab08(row_id urowid,
owner varchar2(30),
table_name varchar2(30),
constraint varchar2(30));
可以通过rdbms/utlexp1.sql创建这个表,与上面的结构是一样的。
当在schema中有exceptions这个表时,则不用 exceptions into xxx语句,否则需要。
再执行语句:
ALTER TABLE ab08 ADD CONSTRAINT IND_AB08_AAE140_AAE002_AAE003 UNIQUE (AAE140, AAE002, AAE003, AAB001, AAC001, AAE143, AAA060, AAA070) using index tablespace ts_hmsimis_ind_a exceptions into except_ab08;
查询表可以看到
SQL> select * from except_ab08;
ROW_ID OWNER TABLE_NAME CONSTRAINT
-------------------------------------------------------------------------------- ------------------------------ ------------------------------ ------------------------------
AAAMysAAJAAAXSFAAZ HMSIMIS AB08 IND_AB08_AAE140_AAE002_AAE003
AAAMysAAJAAABL3AAa HMSIMIS AB08 IND_AB08_AAE140_AAE002_AAE003
AAAMysAAJAAAXSFAAa HMSIMIS AB08 IND_AB08_AAE140_AAE002_AAE003
AAAMysAAJAAABL3AAZ HMSIMIS AB08 IND_AB08_AAE140_AAE002_AAE003
AAAMysAAJAAAXSFAAo HMSIMIS AB08 IND_AB08_AAE140_AAE002_AAE003
AAAMysAAJAAABL3AAm HMSIMIS AB08 IND_AB08_AAE140_AAE002_AAE003
然后在ab08中可以找到这个行,再根据索引的重复值去查找就可以找到重复的记录。
SQL> select * from ab08 where rowid='AAAMysAAJAAAXSFAAZ';
最后再修改数据或索引
1.首先用下面的sql语句创建
create unique index IND_AB08_AAE140_AAE002_AAE003 on AB08 (AAE140, AAE002, AAE003, AAB001, AAC001, AAE143, AAA060, AAA070) tablespace ts_hmsimis_ind_a ;
重复ORA-02299: 无法验证 (HMSIMIS.IND_AB08_AAE140_AAE002_AAE003) - 找到重复关键字
2.换一种方法创建这个唯一索引
ALTER TABLE ab08 ADD CONSTRAINT IND_AB08_AAE140_AAE002_AAE003 UNIQUE (AAE140, AAE002, AAE003, AAB001, AAC001, AAE143, AAA060, AAA070) using index tablespace ts_hmsimis_ind_a;
一样出现无法验证找到重复关键字的错误。
3.通过exceptions来查找重复的值
首先创建一个异常表 :
create table except_ab08(row_id urowid,
owner varchar2(30),
table_name varchar2(30),
constraint varchar2(30));
可以通过rdbms/utlexp1.sql创建这个表,与上面的结构是一样的。
当在schema中有exceptions这个表时,则不用 exceptions into xxx语句,否则需要。
再执行语句:
ALTER TABLE ab08 ADD CONSTRAINT IND_AB08_AAE140_AAE002_AAE003 UNIQUE (AAE140, AAE002, AAE003, AAB001, AAC001, AAE143, AAA060, AAA070) using index tablespace ts_hmsimis_ind_a exceptions into except_ab08;
查询表可以看到
SQL> select * from except_ab08;
ROW_ID OWNER TABLE_NAME CONSTRAINT
-------------------------------------------------------------------------------- ------------------------------ ------------------------------ ------------------------------
AAAMysAAJAAAXSFAAZ HMSIMIS AB08 IND_AB08_AAE140_AAE002_AAE003
AAAMysAAJAAABL3AAa HMSIMIS AB08 IND_AB08_AAE140_AAE002_AAE003
AAAMysAAJAAAXSFAAa HMSIMIS AB08 IND_AB08_AAE140_AAE002_AAE003
AAAMysAAJAAABL3AAZ HMSIMIS AB08 IND_AB08_AAE140_AAE002_AAE003
AAAMysAAJAAAXSFAAo HMSIMIS AB08 IND_AB08_AAE140_AAE002_AAE003
AAAMysAAJAAABL3AAm HMSIMIS AB08 IND_AB08_AAE140_AAE002_AAE003
然后在ab08中可以找到这个行,再根据索引的重复值去查找就可以找到重复的记录。
SQL> select * from ab08 where rowid='AAAMysAAJAAAXSFAAZ';
最后再修改数据或索引
相关文章推荐
- 使用aggregate在MongoDB中查找重复的数据记录
- 查找数据库中重复的值的数据,having的使用,count(1),sum等聚会函数
- 使用aggregate在MongoDB中查找重复的数据记录
- 使用bitmap对一个大小在一定范围内的无重复数据排序(比如电话号码)|在一个大小在一定范围内的数据集中查找重复数据
- java.util.Collections类使用,查找集合中重复数据
- 使用MapReduce查找数据库表的重复数据
- Android数据库中查找一条数据使用的方法 query详解
- 使用struts1回显数据,防重复提交
- 算法:查找int数组中重复的数据
- 编程珠玑---读书笔记---使用后缀数组查找最长重复子串
- JavaWeb -- Struts1 使用示例: 表单校验 防表单重复提交 表单数据封装到实体
- 在excel中查找某列内容中是否有重复数据
- 位图法--解决海量数据问题(查找是否存在,不重复数据)
- 查找数据库中重复数据T-SQL
- [Unity3D]手机3D游戏开发:如何实现最高分的存储与显示(七)----使用Game ID避免数据重复输入
- flume使用(五):taildirSource重复获取数据和不释放资源解决办法
- Spark程序使用groupByKey后数据存入HBase出现重复的现象
- 数据拼接贴贴会有重复如何查找重复的行和剔除重复的行
- [译]在InfoPath的重复表中使用公式去筛选最小值数据
- 使用SQLiteStatement向SQLite数据库批量插入时数据重复问题