16 Aralık 2013 Pazartesi

Oracle - Clean Up duplicate keys

Case:
Assume that you have  a table with duplicate ids , now you want to fix duplicate ids and want to make it all id values unique

Solution:

Step1: First  collect a dataset for duplicate IDs

CREATE TABLE  TMP AS

SELECT
ROWID  DEST_ROWID ,
ID PREV_ID ,
( SELECT  MAX( ID ) FROM TABLE_TEST  S  ) + ROWNUM  NEW_ID
FROM TABLE_TEST
WHERE
ID IN
(
     SELECT DISTINCT ID
     FROM TABLE_TEST
     GROUP BY ID
     HAVING COUNT(1)>1
)

Step2: Now we have a table that contains DUPLICATE_IDs and ROWID value of our table ( which is useful for updates )


Step3: Assing PK to  DEST_ROWID column on TMP table ( need for update )



Final Step:



UPDATE
(
SELECT  A.ID TARGET_ID , B.NEW_ID UPD_ID
FROM
TABLE_TEST  A , TMP B
WHERE
A.ROWID= B.DEST_ROWID
)
SET TARGET_ID = UPD_ID;
COMMIT;







Hiç yorum yok:

Yorum Gönder