因此,我们目前正在努力实现以下目标:
SourceTableA 是一个变更数据捕获表,它将包含自然键 I、U、D、I 然后 U、I 然后 D、I 然后 U 然后 D 或 U 然后 D。此表的主键是自然键+ 动作(I、U 或 D)。
TargetTableA 是一个类型 2 的 scd 表,具有由序列生成器生成的代理键。
我们遇到的主要问题是处理尚未插入的记录的更新(代理键仅存在于映射中,而不存在于表中),但在同一管道中。
我们必须批量处理 SourceTableA 中的所有记录。
由于复杂的查找逻辑,我们不能使用 3 个不同的源限定符作为 I、U、D 管道。
我们不能使用动态缓存来维护生成的代理键的存储,因为我们无法控制 Oracle 将如何处理 ins/upd/delete。它实际上是有效的,直到我们发现它在插入引用的记录之前尝试更新。
我在这里束手无策。
应该发生的情况的前场景:
插入记录进入,为此记录生成密钥,例如 100。它以 active_flag = 'Y' 插入,并且 end_date 为 'open'。接下来,为相同的自然键输入一条更新记录,生成一个键,101,并以 active_flag = 'Y' 插入具有新数据的记录。先前“插入”的第 100 行被停用为 active_flag = 'N' 和 end_date = (update_row).end_date - 1 秒。
谢谢!