Я пишу хранимую процедуру, которая должна синхронизировать таблицу из нашей производственной среды с нашей тестовой средой (один раз в день).
У меня есть 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
Итак, как мне наложить соединение на таблицу «Метры», чтобы убедиться, что они совпадают по местоположению, а не по идентификатору