数据表A1结构如下
A1(cola int primary key,
colb char(10));A1表原有数据:
COLA COLB
---- ----
1 A
2 A
3 A
4 A
5 A
后新增数据,新增后A1表中数据如下:
COLA COLB
---- ----
1 A
2 A
3 A
4 A
5 A
1 B
2 B
3 B
//也许你会问,既然有主键,那些违反主键唯一约束的数据是怎么进去的.是用sqlldr的direct方式导入的
在产生这些重复数据后,做类似select * from A1 where cola=..的操作,会报错:
index "SYS_C002764" or partition of such index is in unusable state ////错误提示于是,我试图基于rowid删除那些违反主键约束规则的数据,用了几种方法:
1. delete from a1 a where rowid != (select min(rowid) from a1 b where a.cola=b.cola);
操作失败,报错同上
2. alter table a1 enable primary key exceptions into exceptions;
但是select * from exceptions发现exceptions表中并无数据 ////这个是为什么???我的问题是:
1. 该如何删除那些重复的记录?该表的DML操作好像都不被允许了
2. 在试图把重复数据扔入exceptions表,为什么exceptions表中没有数据?
A1(cola int primary key,
colb char(10));A1表原有数据:
COLA COLB
---- ----
1 A
2 A
3 A
4 A
5 A
后新增数据,新增后A1表中数据如下:
COLA COLB
---- ----
1 A
2 A
3 A
4 A
5 A
1 B
2 B
3 B
//也许你会问,既然有主键,那些违反主键唯一约束的数据是怎么进去的.是用sqlldr的direct方式导入的
在产生这些重复数据后,做类似select * from A1 where cola=..的操作,会报错:
index "SYS_C002764" or partition of such index is in unusable state ////错误提示于是,我试图基于rowid删除那些违反主键约束规则的数据,用了几种方法:
1. delete from a1 a where rowid != (select min(rowid) from a1 b where a.cola=b.cola);
操作失败,报错同上
2. alter table a1 enable primary key exceptions into exceptions;
但是select * from exceptions发现exceptions表中并无数据 ////这个是为什么???我的问题是:
1. 该如何删除那些重复的记录?该表的DML操作好像都不被允许了
2. 在试图把重复数据扔入exceptions表,为什么exceptions表中没有数据?
删除报错如下:ORA-02429: 无法删除用于强制唯一/主键的索引
直接删PK那一列重复的记录不就行了么~
另外,你说不用rowid,我怎么定位删那些重复的记录(因为我要的效果是对于重复的记录,删除重复的,删除多余的,保留一条,不是全部删除)