У меня есть следующий сценарий в таблице аудита (AUDIT_TABLE).
t_id e_id detail_log date_created
01 111 USER_1; Salary: from '25' to '30'; Dept_ID: from '001' to ''; 01/01/2019
02 111 USER_1; Dept_ID: from '' to '001'; 01/01/2019
03 001 USER_1; Dept_ID: from '012' to ''; 01/01/2019
04 002 USER_1; Dept_ID: from '555' to '666'; 01/01/2019
05 222 USER_1; Dept_ID: from '' to '123'; 01/02/2019
06 333 USER_1; Salary: from '10' to '20'; Dept_ID: from '200' to ''; 01/03/2019
07 444 USER_1; Salary: from '50' to '100'; Dept_ID: from '' to '10'; 01/04/2019
В пакетных процессах есть ошибка, которая инициирует вставку в эту таблицу аудита и создает эти записи «Dept_ID: from .. to
», когда значение «Dept_ID
» (в другой таблице) не изменяется. Есть миллионы таких записей, которые нужно очистить. Записи, в которых зафиксировано несколько изменений полей, т. е. item_id 01
, необходимо обновить, чтобы очистить сообщение аудита Dept_ID
:, а записи, содержащие только запись аудита Dept_ID
, необходимо удалить (item_id 02
). Могут быть и другие пары, которые содержат только контрольное сообщение Dept ID
в обеих записях, и в этом случае оба должны быть удалены. Логика триггера была исправлена, поэтому больше не создаются ложные записи, когда нет фактических изменений в Dept ID
, однако записи, уже созданные во время ошибки, необходимо очистить. Могут быть строки, в которых есть только одна запись пары, и в этом случае их не нужно обновлять/удалять, поскольку Dept_ID фактически был изменен на нуль или изменен с нуля на значение.
Таким образом, после исправления вышеуказанного набора данных должно существовать следующее:
t_id e_id detail_log date_created
01 111 USER_1; Salary: from '25' to '30'; 01/01/2019
03 001 USER_1; Dept_ID: from '012' to ''; 01/01/2019
04 002 USER_1; Dept_ID: from '555' to '666'; 01/01/2019
05 222 USER_1; Dept_ID: from '' to '123'; 01/02/2019
06 333 USER_1; Salary: from '10' to '20'; Dept_ID: from '200' to ''; 01/03/2019
07 444 USER_1; Salary: from '50' to '100'; Dept_ID: from '' to '10'; 01/04/2019
У меня есть операторы удаления и обновления, готовые сделать это, но если я удалю одну запись из пары, то обновление не найдет другую запись, поскольку ее поиск зависит от удаленной записи, и наоборот для оператора обновления. Я думал использовать оператор слияния, но не знаю, как это сделать. Любые идеи?