Оператор MERGE - это один оператор, поэтому он не может по определению охватывать транзакции. (A в ACID означает атомарность.)
Если у вас нет индексов по критериям слияния (предложение ON) для исходной и целевой таблиц, то превращение одного оператора MERGE в N операторов слияния будет выполняться значительно медленнее, чем при выполнении одного Сканирование против источника и / или цели, вы будете делать N из них. Если вы думали, что одно полное сканирование таблицы было медленным, попробуйте выполнить 100 для каждого миллиона строк!
Честно говоря, разделение вашего единственного MERGE на большее количество операторов будет медленнее, так как выполняется больше работы - вы выполняете больше операторов, поэтому возникает больше накладных расходов на анализ и вы выполняете больше коммитов, так что будет больше сериализации, так как ваша программа ожидает выполнения коммита. Единственная веская причина для разделения одного оператора на несколько - это если у вас есть проблемы с восстановлением (О, нет! Задание не было выполнено три часа, а у нас было только четыре часа!) Или если накладные расходы на управление транзакциями (UNDO и ORA-01555 ) становится проблемой.
Если у вас есть доступность ЦП для этого процесса, вы можете рассмотреть возможность использования подсказки PARALLEL для вашего оператора MERGE, чтобы проверить, работает ли он быстрее. Точно так же, если ваш оператор MERGE влияет только на часть строк в целевой таблице, возможно, индекс для столбцов, с которыми объединяются, улучшит производительность.