Re: Consulta con saldo de la fila anterior

From: Arturo Munive <arturomunive(at)gmail(dot)com>
To: Gabriel Hermes Colina Zambra <hermeszambra(at)yahoo(dot)com>
Cc: Alvaro Herrera <alvherre(at)commandprompt(dot)com>, Postgresql <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Consulta con saldo de la fila anterior
Date: 2008-01-02 13:48:53
Message-ID: 477B9645.3030905@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola a todos mientras ensayaba soluciones de diferentes tipos probé
hacer esta basada en un cursor.
al probarla contra mi tablita de ejemplo (la de 500 000 movimientos) la
primera vez demora un como 0.68 sec. pero luego (supongo con el cache
mas calentito) la consulta se mantiene por los 0.15 sec.
Lo que quiero saber es que de malo podría tener mi función , y si por
ahí tantos ojos (los de los participantes de esta lista)
me pudieran decir que cosa podría fallar o volverse lento con el paso
del tiempo (e incremento de datos) o si estoy usando mal los cursores.
Aquí la función.

CREATE OR REPLACE FUNCTION public.saldos_1 () RETURNS SETOF
pg_catalog.record AS
$body$
DECLARE
movs CURSOR FOR
SELECT
id,
id_producto,
id_almacen,
case when entrada then cantidad else 0 end AS entradas,
case when (not entrada) then cantidad else 0 end AS salidas,
fecha,
entrada
FROM mov_almacen
WHERE fecha between date '2004-03-01' AND date'2004-03-31'
ORDER BY fecha;

fila_mov record;
fila_saldo record;
saldo numeric;

BEGIN
saldo = 0;
OPEN movs;

LOOP FETCH movs INTO fila_mov;
EXIT WHEN NOT FOUND;
saldo = saldo+fila_mov.entradas-fila_mov.salidas;
fila_saldo =row(
fila_mov.id,
fila_mov.id_producto,
fila_mov.id_almacen,
fila_mov.entradas,
fila_mov.salidas,
saldo,
fila_mov.fecha);
RETURN NEXT fila_saldo;
END LOOP;

CLOSE movs;

END
$body$
LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;

y la consulto de la siguiente manera

select
*
from saldos_1() AS ( id integer,
id_producto integer,
id_almacen integer,
entradas numeric,
salidas numeric,
saldo numeric,
fecha date)

Como ven la función es muy _simple_. Espero me puedan dar sus puntos de
vista *PRO y Contras* para poder usar una solución
basada en esta idea, o seguir probando.

Saludos.

Arturo Munive

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Raúl Andrés Duque 2008-01-02 13:50:07 Re: Depurar Funciones step to step.
Previous Message Alvaro Herrera 2008-01-02 01:00:10 Re: Consulta con saldo de la fila anterior