Обновлять измененную строку целевой таблицы только с использованием исходной таблицы, если между двумя столбцами имеется какое-либо несоответствие значений - PullRequest
0 голосов
/ 21 февраля 2020

Таблица T1

ID  C1  C2  C3
--  --  --  --
1   x   y   z
2   p   q   r
3   a   b   c

Таблица T2

1   x   y   z
2   p   q1  r
3   a   b   c1

Необходимо обновить все значения T2 в T1, чтобы обе таблицы имели одинаковое значение. Этого можно добиться с помощью оператора слияния .Но в таблице T1 есть столбец update_timestamp, который будет обновляться только в случае любого несоответствия между двумя таблицами. Объединить обновления update_timestamp, если также нет несоответствия. В приведенном выше примере обновление столбца update_timestamp только для идентификаторов № 2 и 3.

MERGE INTO T1
USING T2
ON (T1.ID = T2.ID)
WHEN MATCHED THEN
UPDATE SET T1.C1 = T2.C1,T1.C2 = T2.C2,T1.C3 = T2.C3,T1.update_timestamp=SYSDATE;

1 Ответ

1 голос
/ 21 февраля 2020

Попробуйте это (в случае, если вы отслеживаете изменения для всех 3 столбцов - c1, c2 и c3):

MERGE INTO T1
USING (
  select id, c1, c2, c3 from T2
  minus
  select id, c1, c2, c3 from T1
) T2
ON (T1.ID = T2.ID)
WHEN MATCHED THEN
UPDATE SET T1.C1 = T2.C1,T1.C2 = T2.C2,T1.C3 = T2.C3,T1.update_timestamp=SYSDATE;
...