ORACLE删除重复记录(大量重复数据)

来源:互联网 发布:c51单片机中断 编辑:程序博客网 时间:2024/05/21 08:39

适用于有大量重复记录的情况(Exception into 子句法):

  采用alter table 命令中的 Exception into 子句也可以确定出库表中重复的记录。这种方法稍微麻烦一些,为了使用“excepeion into ”子句,必须首先创建 EXCEPTIONS 表。创建该表的 SQL 脚本文件为 utlexcpt.sql 。对于win2000系统和 UNIX 系统, Oracle 存放该文件的位置稍有不同,在win2000系统下,该脚本文件存放在$ORACLE_HOME\Ora90\rdbms\admin 目录下;而对于 UNIX 系统,该脚本文件存放在$ORACLE_HOME/rdbms/admin 目录下。

  具体步骤如下:


  SQL>@?/rdbms/admin/utlexcpt.sql 
  Table created. 
  SQL>desc exceptions 
  Name Null? Type 
  ----------------------------------------- -------- -------------- 
  ROW_ID ROWID 
  OWNER VARCHAR2(30) 
  TABLE_NAME VARCHAR2(30) 

  CONSTRAINT VARCHAR2(30) 

SQL>alter table test_table add constraint test_table_unique unique(c1,c10,c20) exceptions into exceptions; 
  * 
  ERROR at line 1: 
  ORA-02299: cannot validate (test_table_unique) - duplicate keys found 

SQL>create table dups as select * from test_table where rowid in (select row_id from exceptions); 
  Table created. 
  SQL>select * from dups;  查询表中的重复数据

       SQL>select row_id from exceptions; 查询重复数据rowid

       SQL>delete from test_table where rowid in ( select row_id from exceptions);  根据查询删除表中的重复数据。

CREATE UNIQUE INDEX "TEST_USER"."PK_test_table" ON "TEST_USER"."test_table" ("C1", "C10") PCTFREE 10 INITRANS 2 MAXTRANS 255  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "TEST_TABLESPACE" PARALLEL 1   之前由于重复数据不能创建的unique 也可以创建了。