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