【发布时间】:2016-12-17 06:38:58
【问题描述】:
我需要从每周或每两周更新一次的其他一些仓库表更新我的应用程序中的一些表。我应该根据这些更新我的表格。这些在另一个表中有外键。所以我不能每次都截断表格并重新插入整个数据。所以我必须根据几个不变的主键列来获取增量并相应地更新。需要一些关于如何实施这种方法的意见。
我的做法:
检查这些表、视图的最后更新时间。
如果是最新的,则根据我的表和仓库表中的主键比较每一行。
如果每列不同,请更新它。
如果列没有变化,则不执行任何操作。
如果有新记录则插入。
我的问题:
我该如何实施?编写 PL/SQL 代码是一种好且有效的方法吗?因为预期的记录数约为 800K。
请提供任何示例代码或链接。
【问题讨论】:
-
其他仓库的每条记录上没有时间戳可以用来判断哪些行是相关的?单个合并语句将是第一个尝试的方法。然后尝试并行化;合并 /*+ 并行 */
-
这个问题需要广泛(恕我直言)来回答。最好的解决方案甚至可以从一个表到另一个表使用不同的方法,具体取决于它们的结构、约束、行数和大小……您可以尝试选择一两个表作为示例,发布它们的结构、大小、索引和一些代码来完成任务,寻求帮助来改进你的代码。另外,考虑到 800K 并没有那么多。
-
您的目标表只是源表的副本吗?您需要更新目标表还是它们只是只读的?如果您使用的是企业版,则物化视图可能非常适合您:docs.oracle.com/database/121/REPLN/repmview.htm#REPLN003
-
Materialized Views?在下班时间每天刷新仅更新增量...如果您必须拥有自己的“表格”,那么merge?