从其他数据库更新表数据的最有效方法是什么?

时间:2016-08-30 18:20:13

标签: oracle

我必须创建将在tableB中更新数据但从中获取数据的过程 来自其他数据库的tableA(我正在使用db-link)。我的想法是将tableA数据加载到游标cursor cur,创建简单的循环:

for tmp in cur loop
  if tmp.name != (select name from tableB where tableB_ID = tmp.tableA_ID) then
  update tableB set name = tmp.name where tableB_ID = tmp.tableA_ID;
  end if;
end loop;

并检查两个表中的每一行和每一列,以寻找差异。

这是我的问题的简单表示,因为我可以有大约25个不同的列,可能需要更新大约1000行。也许更好的解决方案是保存一行中的所有差异并创建一个包含许多set的更新语句? 我有点困惑如何有效地做到这一点。创建许多简单的更新(我可能需要执行最多25次更新)或只创建一个复杂的更新。最后我将添加我没有关于需要更新多少行的信息。也许有人有更高效的想法。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

执行此操作的一种方法是为每列创建动态语句。可能类似于:

declare
   sqlstr varchar2(1000);
begin
    for aCol in (select column_Name from user_tab_cols where table_name = 'TABLE_A' and column_name <> 'ID') loop
      sqlstr := 'update tableB b set '||aCol.column_name||
         ' = (select a.'||aCol.column_name||
         ' from tableA a where a.ID = b.ID and '||
         ' a.'||aCol.column_name||' <> b.'||aCol.column_name||')';
     execute immediate sqlstr;
end loop;