Base de Datos, Oracle

Merge en oracle con datos que no están en una tabla

Hace unos días se me presentó la situación en la que tenía que realizar un merge con datos que no estaban en una tabla, tras realizar una búsqueda por internet sólo encontraba el merge normal que selecciona los datos de una tabla y los junta en otra sin embargo eso no era lo que estaba buscando de manera que le consulté a un amigo y él me ayudó, así que hoy les vengo a compartir esta solución.

Vamos a declarar el merge y en el using vamos a indicar que seleccione la información desde dual, en este ejemplo seleccionamos sólo una fila sin embargo podemos concatenar con UNION ALL

MERGE INTO NombreTabla NT
     USING (
              SELECT 'Carlos' Nombre, 1 IdPais FROM DUAL
        ) S
        ON (NT.IdPais = S.IdPais)
WHEN MATCHED
THEN
    UPDATE SET NT.Nombre = S.Nombre
WHEN NOT MATCHED
THEN
    INSERT (Nombre, IdPais) VALUES (S.Nombre, S.IdPais);

En el siguiente código podemos observar un ejemplo con dos filas

MERGE INTO NombreTabla NT
     USING (
              SELECT 'Carlos' Nombre, 1 IdPais FROM DUAL
              UNION ALL
              SELECT 'María' Nombre, 2 IdPais FROM DUAL
        ) S
        ON (NT.IdPais = S.IdPais)
WHEN MATCHED
THEN
    UPDATE SET NT.Nombre = S.Nombre
WHEN NOT MATCHED
THEN
    INSERT (Nombre, IdPais) VALUES (S.Nombre, S.IdPais);

Espero que les sea de ayuda 🙂

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 )

Google photo

Estás comentando usando tu cuenta de Google. 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 )

Conectando a %s