Одним из вариантов является создание уникального индекса (или первичного ключа, если это возможно (в зависимости от того, хотите ли вы разрешить нулевые значения или нет)), который заставит Oracle автоматически отклонять все строки, столбцы которых нарушают уникальность.
Для других опций требуется некоторое программирование.
[ПРАВКА: пропустить ошибки "без вывода сообщений»]
Вот что я имел в виду:
for cur_r in (select col1, col2
from another_table@db_link)
loop
begin --> you need inner BEGIN-EXCEPTION-END block
insert into new_table (col1, col2)
values (cur_r.col1, cur_r.col2);
exception
when dup_val_on_index then
null;
end;
end loop;
В другом варианте используется чистый SQL (т. Е. Без PL / SQL loop ):
insert into new_table (col1, col2)
select col1, col2
from another_table@db_link
where (col1, col2) not in (select col1, col2
from new_table);
Этот параметр даже не требует уникального индекса (что не повредит, хотя), поскольку NOT IN
не будет вставлять строки, значения столбцов которых уже существуют в целевой таблице.