Oracle中查找與刪除重復(fù)記錄方法_第1頁
Oracle中查找與刪除重復(fù)記錄方法_第2頁
Oracle中查找與刪除重復(fù)記錄方法_第3頁
Oracle中查找與刪除重復(fù)記錄方法_第4頁
Oracle中查找與刪除重復(fù)記錄方法_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、Oracle中查找和刪除重復(fù)記錄方法平常工作中可能會遇到當(dāng)試圖對庫表中的某一列或幾列創(chuàng)建唯一索引時(shí),系統(tǒng)提示 ORA-01452 :不能創(chuàng)建唯一索引,發(fā)覺重復(fù)記錄。 下面總結(jié)一下幾種查找和刪除重復(fù)記錄的方法(以表CZ為例): 表CZ的結(jié)構(gòu)如下: SQL desc czName Null? Type C1 NUMBER(10)C10 NUMBER(5)C20 VARCHAR2(3)刪除重復(fù)記錄的方法原理: (1).在Oracle中,每一條記錄都有一個(gè)rowid,rowid在整個(gè)數(shù)據(jù)庫中是唯一的,rowid確定了每條記錄是在Oracle中的哪一個(gè)數(shù)據(jù)文件、塊、行上。 (2).在重復(fù)的記錄中,可能所

2、有列的內(nèi)容都相同,但rowid可不能相同,因此只要確定出重復(fù)記錄中那些具有最大rowid的就能夠了,其余全部刪除。 重復(fù)記錄推斷的標(biāo)準(zhǔn)是: C1,C10和C20這三列的值都相同才確實(shí)是重復(fù)記錄。 經(jīng)查看表CZ總共有16條記錄: SQLset pagesize 100SQLselect * from cz;C1 C10 C20 1 2 dsf1 2 dsf1 2 dsf1 2 dsf2 3 che1 2 dsf1 2 dsf1 2 dsf1 2 dsf2 3 che2 3 che2 3 che2 3 che3 4 dff3 4 dff3 4 dff4 5 err5 3 dar6 1 wee7 2

3、 zxc20 rows selected.1.查找重復(fù)記錄的幾種方法: (1).SQLselect * from cz group by c1,c10,c20 having count(*) 1;C1 C10 C20 1 2 dsf2 3 che3 4 dff(2).SQLselect distinct * from cz;C1 C10 C20 1 2 dsf2 3 che3 4 dff(3).SQLselect * from cz a where rowid=(select max(rowid) from cz where c1=a.c1 and c10=a.c10 and c20=a.c2

4、0);C1 C10 C20 1 2 dsf2 3 che3 4 dff2.刪除重復(fù)記錄的幾種方法: (1).適用于有大量重復(fù)記錄的情況(在C1,C10和C20列上建有索引的時(shí)候,用以下語句效率會專門高): SQLdelete cz where (c1,c10,c20) in (select c1,c10,c20 from cz group by c1,c10,c20 having count(*)1) and rowid not in(select min(rowid) from cz group by c1,c10,c20 having count(*)1);SQLdelete cz whe

5、re rowid not in(select min(rowid) from cz group by c1,c10,c20);(2).適用于有少量重復(fù)記錄的情況(注意,關(guān)于有大量重復(fù)記錄的情況,用以下語句效率會專門低): SQLdelete from cz a where a.rowid!=(select max(rowid) from cz b where a.c1=b.c1 and a.c10=b.c10 and a.c20=b.c20);SQLdelete from cz a where a.rowiddelete from cz a where rowid create table t

6、est as select distinct * from cz; (建一個(gè)臨時(shí)表test用來存放重復(fù)的記錄)SQLtruncate table cz; (清空cz表的數(shù)據(jù),但保留cz表的結(jié)構(gòu))SQLinsert into cz select * from test; (再將臨時(shí)表test里的內(nèi)容反插回來)(4).適用于有大量重復(fù)記錄的情況(Exception into 子句法): 采納alter table 命令中的 Exception into 子句也能夠確定出庫表中重復(fù)的記錄。這種方法略微苦惱一些,為了使用“excepeion into ”子句,必須首先創(chuàng)建 EXCEPTIONS 表。創(chuàng)

7、建該表的 SQL 腳本文件為 utlexcpt.sql 。關(guān)于win2000系統(tǒng)和 UNIX 系統(tǒng), Oracle 存放該文件的位置稍有不同,在win2000系統(tǒng)下,該腳本文件存放在$ORACLE_HOMEOra90rdbmsadmin 目錄下;而關(guān)于 UNIX 系統(tǒng),該腳本文件存放在$ORACLE_HOME/rdbms/admin 目錄下。 具體步驟如下: SQL?/rdbms/admin/utlexcpt.sqlTable created.SQLdesc exceptionsName Null? Type ROW_ID ROWIDOWNER VARCHAR2(30)TABLE_NAME V

8、ARCHAR2(30)CONSTRAINT VARCHAR2(30)SQLalter table cz add constraint cz_unique unique(c1,c10,c20) exceptions into exceptions; *ERROR at line 1:ORA-02299: cannot validate (TEST.CZ_UNIQUE) - duplicate keys foundSQLcreate table dups as select * from cz where rowid in (select row_id from exceptions); Tabl

9、e created.SQLselect * from dups; C1 C10 C20 1 2 dsf1 2 dsf1 2 dsf1 2 dsf2 3 che1 2 dsf1 2 dsf1 2 dsf1 2 dsf2 3 che2 3 che2 3 che2 3 che3 4 dff3 4 dff3 4 dff16 rows selected.SQLselect row_id from exceptions;ROW_IDAAAHD/AAIAAAADSAAAAAAHD/AAIAAAADSAABAAAHD/AAIAAAADSAACAAAHD/AAIAAAADSAAFAAAHD/AAIAAAADSA

10、AHAAAHD/AAIAAAADSAAIAAAHD/AAIAAAADSAAGAAAHD/AAIAAAADSAADAAAHD/AAIAAAADSAAEAAAHD/AAIAAAADSAAJAAAHD/AAIAAAADSAAKAAAHD/AAIAAAADSAALAAAHD/AAIAAAADSAAMAAAHD/AAIAAAADSAANAAAHD/AAIAAAADSAAOAAAHD/AAIAAAADSAAP16 rows selected.SQLdelete from cz where rowid in ( select row_id from exceptions);16 rows deleted.SQLinsert into c

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論