2

我有一个场景,我们想更新 oracle 表中的 40 列。source 是另一个 oracle 表。

  1. 他们想忽略列的值,如果它有 null !

例子:

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 

注意:只有当它不为空时,我们才需要更新 ..

任何建议表示赞赏。

4

2 回答 2

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”用作指导性指南。

于 2013-07-16T19:03:10.130 回答
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 中查找匹配行的列。

分享和享受。

于 2013-07-16T20:02:05.050 回答