There's an Oracle-specific trick to delete the duplicates from a table.
Suppose your table FOO has the following fields: bar, baz, blat, blong, blork
To get rid of the dupes, you want to identify the rows that are identical on -all- the fields in the table. So the query to ID the dupes would be something like
select bar, baz, blat, blong, blork from FOO group by bar, baz, blat, blong, blork having count(*) > 1 ;
So now you have a list of dupes. Fine and dandy. Now there's a neat trick you can use to get rid of all but 1 of each of these rows! Oracle provides a "pseudocolumn," ROWID, which is a representation of the physical location of each row and so is unique for each row in the table. So the following query gets you the rows that you want to keep:
select min(rowid), bar, baz, blat, blong, blork from FOO group by bar, baz, blat, blong, blork ;
For rows that AREN'T dupes, this will just return the row with its rowid. For rows that ARE dupes, this will return the row data along with the rowid for ONE copy of that row, no matter how many copies are in the table. Neat eh? So all you have to do is get rid of all the rows that AREN'T in this resultset:
delete from FOO where rowid not in ( select min(rowid) from FOO group by bar, baz, blat, blong, blork ) ;