2013-07-16 3 views
2

У меня есть сценарий, в котором мы хотим обновить 40 столбцов в таблице оракула. источником является другая таблица оракула.Обновить целевую таблицу, только если ее нет.

  1. Они хотят сопоставить значение столбца, если оно имеет значение null!

пример:

col1 col2 col3 
1 null b 
2 null 3 

целевая таблица:

col1 col2 col3 
1  a null 
2  b null 

после updted.

col1 col2 col3 
1  a b 
2  b 3 

примечание: мы должны upate только если его не нулевой ..

любой посоветуете ценится.

ответ

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» только в качестве поучительного руководства.

+0

Большое спасибо за этот шаблон. – user2588724

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.

Делитесь и наслаждайтесь.

Смежные вопросы