Tengo una base de datos main
y una base de datos report
, y necesito sincronizar una tabla desde main
en report
.Al hacer un MERGE en Oracle SQL, ¿cómo puedo actualizar las filas que no coinciden en el SOURCE?
Sin embargo, cuando un elemento se elimina en la base de datos main
, solo quiero establecer un indicador IsDeleted
en la base de datos report
.
¿Qué es una forma elegante de hacer esto?
Actualmente estoy usando una instrucción MERGE, así:
MERGE INTO report.TEST target
USING (SELECT * FROM main.TEST) source
ON (target.ID = source.ID)
WHEN MATCHED THEN
UPDATE SET (target... = source...)
WHEN NOT MATCHED THEN
INSERT (...) VALUES (source...)
;
La declaración WHEN NOT MATCHED
me da todos los nuevos valores de main
, pero también quiero poner al día todos los viejos valores de report
.
Estoy usando Oracle PL/SQL.
¿Con qué valores desea actualizar 'main.test'? ¿De dónde los sacarías? –
Si la fila se borra de 'main.test', entonces la fila' report.test' correspondiente no tendrá igual. Quiero establecer el indicador 'report.test.IsDeleted' para todas las filas no coincidentes. –
No creo que sea posible ya que el resultado de JOIN subyacente ('using (...)') no contendrá esa fila. Entonces, ¿de dónde deberían venir esos datos? –