方法原理: 
1、Oracle中,每一条记录都有一个rowid,rowid在整个数据库中是唯一的, 
  rowid确定了每条记录是在ORACLE中的哪一个数据文件、块、行上。 
2、在重复的记录中,可能所有列的内容都相同,但rowid不会相同,所以只要确定出重复记录中 
  那些具有最大rowid的就可以了,其余全部删除。 
实现方法: 

SQL> create table a ( 
 2 bm char(4), --编码 
 3 mc varchar2(20) --名称 
 4 ) 
 5 /

SQL> select rowid,bm,mc from a; 
ROWID BM MC 
------------------ ---- ------- 
000000D5.0000.0002 1111 1111 
000000D5.0001.0002 1112 1111 
000000D5.0002.0002 1113 1111 
000000D5.0003.0002 1114 1111 
000000D5.0004.0002 1111 1111 
000000D5.0005.0002 1112 1111 
000000D5.0006.0002 1113 1111 
000000D5.0007.0002 1114 1111

查询到8记录.

查出重复记录 

SQL> select rowid,bm,mc from a where a.rowid!=(select max(rowid) from a b where a.bm=b.bm and a.mc=b.mc); 
ROWID BM MC 
------------------ ---- -------------------- 
000000D5.0000.0002 1111 1111 
000000D5.0001.0002 1112 1111 
000000D5.0002.0002 1113 1111 
000000D5.0003.0002 1114 1111

删除重复记录

SQL> delete from a a where a.rowid!=(select max(rowid) from a b where a.bm=b.bm and a.mc=b.mc);


删除4个记录. 

SQL> select rowid,bm,mc from a; 
ROWID BM MC 
------------------ ---- -------------------- 
000000D5.0004.0002 1111 1111 
000000D5.0005.0002 1112 1111 
000000D5.0006.0002 1113 1111 
000000D5.0007.0002 1114 1111