2011-09-26 50 views
0

我有两个具有相同表格布局的数据库。有十几张感兴趣的表格。他们之间有许多FK。oracle - 将数据移动到相同的数据库

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

我的问题是什么做到这一点的最佳(最efficent /最佳实践)的方式?

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

我应该加入表一起的尝试插入到在同一时间的所有表?

谢谢!

附加信息:如果它已不存在 记录应插入。 (基于相应表的PK)。否则应该更新。

显然我需要遍历所有的子表,所以只有一个记录要复制到父表中,但子表可能有10个,子表的子表可能有500个。我当然会需要更新记录,如果它已经存在,插入如果它不是子表格太...

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

所以我猜这个问题是它最好只是做了十:

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

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

或者是它更好地做一些还挺花哨的连接来完成所有的刀片在一个SQL语句?

+0

这是一次性练习还是常规练习?数据库的什么版本?你的失败单位是什么 - 所有记录或只是给定的顶级PK? – APC

+0

这是一个常规流程。如果顶级PK发生故障,那么PK可以重新运行。而不是更新记录,我可以只删除它们,然后只做一个插入。 proly会使解决方案变得更简单。 – kralco626

回答

2

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

想想伐木。你想要产生多少重做?

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

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

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

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

相关问题