【发布时间】:2019-01-13 03:44:31
【问题描述】:
我在审计表 (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”值(在另一个表中)没有变化时,批处理过程中存在一个错误,该错误会触发插入此审计表并创建这些记录“Dept_ID: from .. to”。有数百万条这样的记录需要清理。捕获了多个字段更改的记录,即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
我已经准备好删除和更新语句来执行此操作,但如果我删除这对记录中的一条记录,则更新将找不到另一条记录,因为它依赖于已删除的记录来找到它,反之亦然更新语句.我想使用合并语句,但不知道如何。有什么想法吗?
【问题讨论】:
标签: sql oracle sql-update oracle12c sql-delete