1

站点:Oracle Exadata 作为源,Netezza 作为目标

场景:表 A 的记录正在复制到目标,在复制期间,这些记录将使用表 B 中的特定日期(也称为运行日期)进行标记。

表 A(包含许多记录) Col1、Col2、Col3... Rundate

表 B(在任何时间点仅包含 1 条记录) Rundate、ColA、ColB...ColZ

这些表之间没有可用的公共键。我尝试使用 %GETCOL 函数来检索列并遇到问题。

我怎样才能做到这一点?解决方案带来的性能影响是什么?

4

1 回答 1

0

实现这一点的方法是通过源派生列中的用户出口。用户出口可以是 Java 或 PL/SQL 中的存储过程 用户出口只需执行类似 的操作select rundate from tableB where rownum=1,然后通过输出参数将其传递回 CDC 填充源派生列的表达式为%USERFUNC

至于对订阅性能的影响,它实际上取决于存储过程必须做什么以及它的编写效率如何,例如它是否以将数据和代码保留在内存中的方式编写或实现在复制开始后的第一次调用之后,影响将小于每次调用都需要磁盘读取的情况。顺便说一句,使用%GETCOL并非没有成本,因为它意味着为处理的每个行操作读取数据库。通常,Java 被认为比存储过程更有效。

于 2019-11-14T15:09:16.500 回答