Cordial saludo compañeros.

Quisiera saber si a alguien se le ocurre una solución a este problema.

Tengo un proceso que actualiza datos en una tabla basado en valores de otra 
tabla. Actualmente lo realizo DESDE LA APLICACION recorriendo la tabla base y 
por cada registro realizo una actualización en la tabla a actualizar, pero es 
MUY demorado por la cantidad de datos que actualmente se maneja y ahora quiero 
hacerlo desde la DB (pl/pgsql) y "set-oriented".

Más o menos el algoritmo que hago desde la aplicación es el siguiente:

for each (select distinct muestra_par = id_parte, muestra_alm = id_almacen, 
muestra_loc = id_localizacion from def_salinvmes)
    select nuevovalor = valor 
    from def_salinvmes
    where id_parte = muestra_par
        id_almacen = muestra_alm
        id_localizacion = muestra_loc
    order by anno_salinvmes desc, mes_salinvmes desc
    limit 1    

    update def_existloc
    set valor = nuevovalor
    where id_parte = muestra_par 
        id_almacen = muestra_alm
        id_localizacion = muestra_loc
end for each

Lo que se me ha ocurrido es utilizar un cursor pero automáticamente se me cae 
el desempeño al piso y casi que estría haciendo lo mismo que hago desde la 
aplicación en la DB. Otra alternativa era crear un trigger/regla en el before 
para cambiar el update por un delete/insert algo así como implementar un UPSERT 
pero no me gusta la idea de crear y borrar este trigger cada vez que se corre 
el proceso ya que no podría tenerlo "vivo" en la operación normal.

Cualquier comentario es bienvenido.

Atentamente,

RAUL DUQUE
Bogotáq, Colombia

Responder a