oracle - 将数据移动到相同的数据库

时间:2011-09-26 13:19:33

标签: oracle data-mining

我有两个具有相同表格布局的数据库。有十几个感兴趣的表。它们之间有许多FK。

我被要求编写一个存储过程,根据层次结构顶部的父表的PK将数据从数据库A复制到数据库B.我可能只收到一个值或值列表。我应该从数据库A中选择与值匹配的所有记录,并将它们插入/更新到数据库B.这也包括子表中的所有记录。

我的问题是最好的(最有效/最佳实践)方法吗?

我应该写一打选择...插入...语句吗?

我是否应该同时加入表格,同时尝试插入所有表格?

谢谢!

其他信息: 如果记录尚未存在,则应插入记录。 (基于各个表的PK)。否则应该更新。

显然我需要遍历所有子表,因此在父表中只能复制一条记录,但子表可能有10条,子表的子表可能有500条。我当然需要如果记录已存在则更新记录,如果记录不适用于子表,则插入...

更新: 我认为如果我只删除与顶级密钥相关的所有记录,然后插入所有新记录而不是尝试进行更新,这将使解决方案更简单。

所以我想问题是最好只做一打:

delete from ... where ... in ...

select from ... where ... in ...
insert into...

或者在一个sql语句中做一些奇特的连接来做所有插入更好吗?

1 个答案:

答案 0 :(得分:2)

我会通过禁用所有外键约束,然后执行一组MERGE语句来处理更新和插入,然后启用所有约束来执行此操作。

考虑记录。你想要生成多少重做?

您可能会发现截断所有目标表然后使用nolog插入所有目标表会更快更好。可能比合并更简单。

一个主要的主要替代方案是删除所有目标表并使用导出和导入。可能要快得多。

第二种方法是使用物化视图,特别是如果您不需要对目标表进行更新。这样,Oracle为您完成了所有繁重的工作。您可以通过仔细选择刷新组来强制完整性。

有几种方法可以解决此业务问题。 PL / SQL程序可能不是最好的。