我必须创建将在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次更新)或只创建一个复杂的更新。最后我将添加我没有关于需要更新多少行的信息。也许有人有更高效的想法。
感谢您的帮助!
答案 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;