Oracle – SQL Merge

junio 1, 2010


Durante la migración de un sistema anterior, tenía que realizar la tarea de copiar los datos a las nuevas tablas. Como en realidad conviven los sistemas en la etapa de migración, necesitaba una forma de sincronizar los datos de los sistemas. Primero pensé en realizar una aplicación que se hiciera cargo de esto pero se me hacía muy elaborado, fue cuando alguien me sugirió utilizar el comando MERGE. Este comando te permite sincronizar los datos de una manera sencilla.
En Oracle la sintaxis la encuentras aqui, yo lo utilicé de la siguiente forma:

MERGE INTO TDATOS DATO
USING(
  SELECT MES,ANN,CATEGORIA,CANTIDAD
  FROM TABLA_ANTERIOR
) DATO_ANT ON (DATO.NMES=DATO_ANT.MES AND DATO.NANYO=DATO_ANT.ANN AND DATO.SID_CATEGORIA=DATO_ANT.CATEGORIA)
WHEN NOT MATCHED THEN
  INSERT (DATO.NMES,DATO.NANYO,DATO.SID_CATEGORIA,DATO.NCANTIDAD)
  VALUES (DATO_ANT.MES,DATO_ANT.ANN,DATO_ANT.CATEGORIA,DATO_ANT.CANTIDAD)
;

donde: TDATOS es la tabla donde vamos a insertar los nuevos registros y actualizar los ya existentes; en la clausula “USING” utilizamos una subconsulta con los registros que estamos migrando; en la condicion “ON”, para saber si el registro ya existe, mi llave primaria esta compuesta por mas de un campo -en este caso- NMES, NANYO Y SID_CATEGORIA; no utilicé la condición “WHEN MATCHED THEN”, que serviria para actualizar registros ya existentes.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: