适用于有大量重复记录的情况(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; SQL>create table dups as select * from test_table where rowid in (select row_id from exceptions); 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 也可以创建了。 |