Как обработать ошибку строки в прямой вставке пути - PullRequest
1 голос
/ 19 марта 2019

У меня есть таблица A, которая мне нужна, чтобы вставить ее данные в таблицу B.

Я делаю это с direct path insert для проблемы производительности:

INSERT /*+ append */ INTO
usr.B (c,d,e)
select c,d,e from usr.A;

Теперь я хочу добавить обработку ошибок на уровне строк.

Я имею в виду, что если есть исключение с некоторыми строками (из-за ограничений), следующие строки будут продолжать вставляться в A, и конкретные проблемные строки будут сохранены в таблице журнала.

Поэтому я проверил опцию ведения журнала ошибок DML для этой цели, но обнаружил, что он не может работать с ограничениями уникальных дубликатов в инструкциях прямого пути, что является очень основным и важным ограничением в моих таблицах.

Я видел это решение , которое предлагает добавить фиктивный сбой, если есть дубликаты, но это не может быть хорошо для меня по ряду причин:

  1. У меня есть много таблиц (1000), которые должны пройти этот процесс, поэтому добавить столбец для каждой таблицы невозможно.

  2. Решение поможет, если в исходной таблице уже есть дубликаты, но в моем случае в каждой таблице может быть по одной строке, поэтому проверка дубликатов исходных данных недостаточно хороша.

Есть ли идеи, как это сделать правильно?

Я знаю, что есть опция SAVE EXCEPTIONS с FORALL, но я действительно предпочитаю использовать INSERT SELECT для всех строк без цикла.

Спасибо.

...