miércoles, 30 de octubre de 2013

Recursividad de una funcion de Postgres

Aqui algo que realizamos en la oficina y que me parece super interesante, Recursividad de una funcion en Postgres.
Lo que hace es buscar una fecha en una tabla, si no la encuetnra resta dias y continua la busqueda hasta que encuentra le fecha.

CREATE OR REPLACE FUNCTION general.get_tipo_cambio_recursivo(xc_empresa character varying, xfecha date)
RETURNS numeric AS
$BODY$
declare

xc_empresa alias for $1;
xfecha alias for $2;

rstemp record;
xtipocambio numeric;
xfecha_recursiva date;


begin
xtipocambio=0;

for rstemp in select venta_contable from maestros.tipo_cambio

where estado=1 and c_empresa=xc_empresa and f_tc=xfecha
loop
xtipocambio=rstemp.venta_contable;
end loop;
if (xtipocambio is null or xtipocambio=0) then
xfecha_recursiva=xfecha-1;
xtipocambio=general.get_tipo_cambio_recursivo(xc_empresa, xfecha_recursiva);
end if;

return xtipocambio;

end
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;

Continúa...