domingo, julio 29, 2007

Firebird Stored Procedures

Trabajando con los procedimientos almacenados de firebird. Algo interesante es la posibilidad de tener columnas con acumulados en los procedimientos, algo que no es facil de lograr con MS SQL Server (a menos que se usen tablas temporables o variables de tipo tabla). Y la posibilidad de ejecutar procedimientos por cada registro.

Este es un ejemplo de un procedimiento que regresa un dataset con los movimientos de una cuenta, mostrando el saldo en cada registro.

CREATE PROCEDURE EDO_CTA(DESDE DATE)
RETURNS(
FECHA DATE,
CONCEPTO VARCHAR(50),
ENTRADA DECIMAL(15, 2),
SALIDA DECIMAL(15, 2)
SALDO DECIMAL(15, 2)
)
AS
BEGIN
--Obtenemos el saldo inicial
EXECUTE PROCEDURE GET_SALDO_INICIAL(:DESDE)
RETURNING_VALUES :SALDO;

FOR SELECT
FECHA, CONCEPTO, ENTRADA, SALIDA
FROM
MOVIMIENTOS_CUENTA
WHERE
FECHA > :DESDE
INTO
:FECHA, :CONCEPTO, :ENTRADA, :SALIDA
DO BEGIN
SALDO = SALDO + ENTRADA - SALIDA;
SUSPEND;
END
END;


Esto ira calculando el saldo por cada registro.