Вы продолжаете упоминать "данные, которые повторяются" (это дубликаты , тогда?), И это является причиной отсутствия уникального идентификатора в таблице.
Если возможно (почему бы и нет?), Измените таблицу и добавьте новый столбец, назовем его «ID».Заполните его значение сейчас для существующих строк и создайте триггер базы данных, который позаботится о будущих вставках.
Вот пример:
SQL> create table test as select ename, job, sal from emp;
Table created.
SQL> alter table test add id number;
Table altered.
SQL> create sequence seq_id;
Sequence created.
SQL> update test set id = seq_id.nextval;
12 rows updated.
SQL> create or replace trigger trg_bi_test
2 before insert on test
3 for each row
4 begin
5 :new.id := nvl(:new.id, seq_id.nextval);
6 end;
7 /
Trigger created.
SQL> insert into test (ename, job, sal) values ('Littlefoot', 'loser', 100);
1 row created.
SQL> select * from test order by id;
ENAME JOB SAL ID
---------- --------- ---------- ----------
SMITH CLERK 800 1
ALLEN SALESMAN 1600 2
WARD SALESMAN 1250 3
JONES MANAGER 2975 4
MARTIN SALESMAN 1250 5
BLAKE MANAGER 2850 6
CLARK MANAGER 2450 7
KING PRESIDENT 5000 8
TURNER SALESMAN 1500 9
JAMES CLERK 950 10
FORD ANALYST 3000 11
MILLER CLERK 1300 12
Littlefoot loser 100 13
13 rows selected.
SQL>
Теперь у вас есть «уникальный идентификатор», который фиксирован и не изменится при запросе данных.