Вы можете использовать предложение EXCEPTIONS INTO, чтобы перехватить дублирующиеся строки.
Если у вас еще нет таблицы EXCEPTIONS, создайте ее с помощью предоставленного сценария:
SQL> @$ORACLE_HOME/rdbms/admin/ultexcpt.sql
Теперь вы можете попытаться создать уникальное ограничение, подобное этому
alter table Table1
add constraint tab1_uq UNIQUE (col1, col2, col3, col4)
exceptions into exceptions
/
Это не удастся, но теперь ваша таблица ИСКЛЮЧЕНИЙ содержит список всех строк, ключи которых содержат дубликаты, идентифицируемые ROWID. Это дает вам основание для решения, что делать с дубликатами (удалить, перенумеровать, что угодно).
1012 * редактировать *
Как уже отмечали другие, вам придется оплатить стоимость сканирования таблицы один раз. Этот подход дает вам постоянный набор дублированных строк, а ROWID - это самый быстрый способ доступа к любой данной строке.