我有一个场景,我们想在oracle表中更新40列。 source是另一个oracle表。
示例:
col1 col2 col3
1 null b
2 null 3
目标表:
col1 col2 col3
1 a null
2 b null
更新后。
col1 col2 col3
1 a b
2 b 3
注意:只有当它不为空时我们才必须升级..
任何建议都表示赞赏。
答案 0 :(得分:3)
update target_table tt
set (col1, col2, col3) = ( select nvl(st.col1,tt.col1),
nvl(st.col2,tt.col2),
nvl(st.col3,tt.col3)
from source_table st where st.primary_key = tt.primary_key )
where exists ( select null
from source_table st
where st.primary_key = tt.primary_key
and (st.col1 is not null
or st.col2 is not null
or st.col3 is not null) );
显然你必须确定主键是什么。我只使用“primary_key”作为指导性指南。
答案 1 :(得分:3)
尝试
MERGE INTO TARGET_TABLE t
USING SOURCE_TABLE s
ON (s.COL1 = t.COL1)
WHEN MATCHED THEN
UPDATE SET t.COL2 = NVL(t.COL2, s.COL2)
t.COL3 = NVL(t.COL3, s.COL3);
我在这里假设COL1是用于在TARGET_TABLE和SOURCE_TABLE中查找匹配行的列。
分享并享受。