MERGE INTO Между производством и тестированием, где объединяемые таблицы нуждаются в объединении - PullRequest
0 голосов
/ 14 июля 2010

Я пишу хранимую процедуру, которая должна синхронизировать таблицу из нашей производственной среды с нашей тестовой средой (один раз в день). У меня есть 2 таблицы. Для простоты назовем их «Метры и измерения».

Meters = [Meter_id, Location]
Measurements = [Meter_id, Value, MeasurementTime]

Я хочу синхронизировать измерения и предположим, что я могу вручную добавить измеритель в свою тестовую среду. Meter_id может не синхронизироваться между обеими базами данных, но Location не меняется.

Я установил ссылку на базу данных на наш тестовый сервер с именем db_test. Теперь я хотел бы использовать оператор Merge для обновления Measurements @ db_test

MERGE INTO Measurements@db_test meas_test
USING Measurements meas
   ON (???)
WHEN MATCHED THEN
   -- Do update
WHEN NOT MATCHED THEN
   -- Do insert

Я думал в этом направлении ...

MERGE INTO Measurements@db_test meas_test
USING (SELECT value, location 
       FROM meters mtr, measurements meas 
       WHERE mtr.meter_id = meas.meter_id AND 
       MeasurementTime > sysdate - 1)  meas_new
ON ( meas_new.location = ??? AND 
     meas_new.value = meas_test.value AND 
     meas_new.MeasurementTime = meas_test.MeasurementTime)            
WHEN MATCHED THEN
   -- Do update
WHEN NOT MATCHED THEN
   -- Do insert

Итак, как мне наложить соединение на таблицу «Метры», чтобы убедиться, что они совпадают по местоположению, а не по идентификатору

1 Ответ

2 голосов
/ 17 июля 2010

Разве вы не можете просто присоединиться к таблице Meters тестовой среды по ссылке?Как это:

MERGE INTO measurements@db_test meas_test
USING (SELECT mtr_test.meter_id, meas.value, meas.measurementtime
         FROM meters mtr, measurements meas, meters@db_test mtr_test
        WHERE mtr.meter_id = meas.meter_id
          AND mtr_test.location = mtr.location
          AND meas.measurementtime > sysdate - 1) meas_new
   ON (meas_new.meter_id = meas_test.meter_id
       AND meas_new.value = meas_test.value
       AND meas_new.measurementtime = meas_test.measurementtime)
 WHEN MATCHED THEN
      -- Do update
 WHEN NOT MATCHED THEN
      -- Do insert
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...