Firebird Actualizar tablas con el resultado de un select usando For Do

Una de las cosas que más extraño cuando he tenido que trabajar con Firebird o Interbase es la ejecución de sentencias update a partir del resultado de una consulta tal y como se hace en otros motores de bases de datos. Pero hace poco me he topado con la cláusula For Select Into que me parece una muy buena opción para realizar estas operaciones de actualización.

La cláusula For Select Into Do es en realidad un Cursor que recorre el resultado de una consulta fila a fila y actualiza una tabla con los valores que va almacenando en las variables.

Un ejemplo de esto se puede ver en el siguiente código
FOR SELECT Prod_Id, Almace.Existencia
FROM Productos Prod
INNER JOIN Almacen Almace
ON Prod.Id = Almace.Prod_Id
ORDER BY Prod_Id
INTO :VI_IDPROD, :VN_Existencia
DO
UPDATE ExistenciaFinDia
SET Existencia = :VN_Existencia
WHERE Prod_Id = :VI_IDPROD;

La ventaja de usar esta clausula además del rendimiento, es que uno puede realizar consultas que involucren múltiples tablas de una forma mucho más clara.

Sé el primero en comentar

Deja un comentario