Delete duplicate rows from Oracle tables
This is very common scenario and advance of Analytical functions made it very simple.
DELETE
FROM <TABLE_NAME>
WHERE ROWID IN
( SELECT ROWID FROM
( SELECT
ROWID,
ROW_NUMBER()
OVER
( PARTITION BY <KEY_COLUMNS>
ORDER BY <KEY_COLUMNS>
) DUP
FROM <TABLE_NAME>
)
WHERE DUP > 1
);
More about this found at http://www.dba-oracle.com/t_delete_duplicate_table_rows.htm