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

适用于有大量重复记录的情况(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 也可以创建了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值