Do it in a single transaction (no commits inbetween), do it in SQL (no need forPL/SQL) and make the SQL statements so that Oracle can make use of your index:
DELETE FROM my_table mt WHERE EXISTS
(SELECT null FROM my_table
WHERE col1 = mt.col1
AND col2 = mt.col2
AND col2 = mt.col2
AND rowid < mt.rowid);
This should fly in comparisson with your original delete, because the optimizer will use your index.
Jurij Modic
ASCII a stupid question, get a stupid ANSI
24 hours in a day .... 24 beer in a case .... coincidence?