В зависимости от версии Oracle, вы можете использовать протоколирование ошибок DML.Что-то вроде
Создание исходной и целевой таблиц с данными
SQL> create table foo (
2 col1 number primary key,
3 col2 number unique
4 );
Table created.
SQL> create table foo_temp (
2 col1 number,
3 col2 number
4 );
Table created.
SQL> insert into foo values( 1, 1 );
1 row created.
SQL> insert into foo_temp values( 2, 1 );
1 row created.
SQL> insert into foo_temp values( 3, 2 );
1 row created.
Создание таблицы журнала ошибок
SQL> exec dbms_errlog.create_error_log( 'FOO' );
PL/SQL procedure successfully completed.
MERGE с синтаксисом LOG ERRORS
Обратите внимание, что одна строка была успешно объединена, а одна строка сгенерировала уникальное исключение ограничения и была записана в таблицу ошибок.*