0

因此,我们目前正在努力实现以下目标:

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 秒。

谢谢!

4

2 回答 2

0

当源读取相同自然键的两条记录时,目标上的动态查找将解决此问题,因为动态查找将更新缓存,然后更新目标

于 2016-02-23T08:01:17.740 回答
0

在更新策略中,为插入和更新设置属性为 DD_Update。在会话级别,映射属性检查仅更新,否则插入。

希望它有效!

于 2016-02-29T05:17:43.573 回答