UPDATE con MERGE

Oracle, pionero en BD relacionales.

UPDATE con MERGE

Notapor Pere » Mié Jun 16, 2010 10:31 am

Imaginemos estas dos tablas: ARTICULOS y NOVEDADES, donde NOVEDADES contiene los precios actualizados de algunos artículos, es decir, la tabla NOVEDADES contiene la relación de artículos cuyo precio ha cambiado y el nuevo precio.

La cuestión es que se debe actualizar la tabla ARTICULOS con los precios que indica la tabla NOVEDADES para aquellos artículos que contiene la tabla NOVEDADES.

La forma de realizar esta actualización con SQL sería la siguiente:

Código: Seleccionar todo

update ARTICULO A
   set A
.PRECIO = (select N.PRECIO
                     from NOVEDADES N
                    where N
.ID_ARTICULO = A.ID_ARTICULO)
 where A.ID_ARTICULO in (select NOV.ID_ARTICULO
                           from NOVEDADES NOV
)
 

Si decidimos hacer esta actualización con PL/SQL, esta sería una posible solución:

Código: Seleccionar todo
declare
   cursor novedades is
      select ID_ARTICULO
, PRECIO
        from NOVEDADES
;
begin
   for cur_nov in novedades loop
      update ARTICULOS
         set PRECIO 
= cur_nov.precio
       where ID_ARTICULO 
= cur_nov.id_articulo;
   end loop;
end;
 

El bloque de código anterior abre un cursor sobre la tabla NOVEDADES, e itera sobre todos los artículos que contiene, actualizando para cada uno de ellos el precio en la tabla ARTICULOS.

Sin embargo existe un método en oracle para realizar esta actualización de forma mucho más eficiente que los dos métodos anteriores usando la instrucción merge, la sentencia SQL quedaría de la siguiente manera:

Código: Seleccionar todo

merge into ARTICULOS ART
using
  
(      
      select ID_ARTICULO
, PRECIO
        from NOVEDADES
  
) NOV
on                      
  
(                     
   ART
.ID_ARTICULO = NOV.ID_ARTICULO
  
)                       
when matched then update set ART
.PRECIO = NOV.PRECIO;
 

Este método es especialmente adecuado cuando se deben tratar cientos de miles de registros o más.

Espero os sea útil.
Pere
 
Mensajes: 69
Registrado: Mar Feb 02, 2010 9:44 pm

Re: UPDATE con MERGE

Notapor Cristian_Ferreyra » Mar Jun 06, 2017 3:10 pm

Hola, quisiera saber quien me puede ayudar a realizar lo siguiente:
Tengo una tabla con las siguientes columnas

Grupo Nombre Sexo Edad Religion Profesion
Positivo Cristian M 32 Catolico Estudiante
Soltera Maria F 30 Catolico Medico
Soltera Flor F 32 Judio Administrativo
Cristian_Ferreyra
 
Mensajes: 1
Registrado: Mar Jun 06, 2017 1:59 pm


Volver a SGBD Oracle

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 3 invitados