Tenho um pequeno sistema financeiro, onde tenho uma tabela com a seguinte estrutura:
Table extrato (id integer, data date, tipo char(1), valor real);
estou tentando criar uma função no PostgreSQL, que me traga os registros, ordenado por data, e calculando o saldo progressivo.
Criei esta função
CREATE OR REPLACE FUNCTION public.retorna_resumo(date,date)
RETURNS SETOF extrato_financeiro
LANGUAGE 'plpgsql'
COST 100
VOLATILE
ROWS 1000
AS $BODY$
DECLARE resumo extrato_financeiro;
BEGIN
FOR resumo IN select id, data, tipo, valor from extrato where data between $1 and $2 order by data, id
LOOP
IF resumo.tipo = 'C' THEN
resumo.saldo:= resumo.saldo + resumo.valor;
END IF;
IF resumo.tipo = 'D' THEN
resumo.saldo:= resumo.saldo - resumo.valor;
END IF;
RETURN NEXT resumo;
END LOOP;
RETURN;
END;
$BODY$;
A função, até retorna as informações, mas não calcula o SALDO...
Pergunta
Alison Wolf
Salve a todos...
Tenho um pequeno sistema financeiro, onde tenho uma tabela com a seguinte estrutura:
Table extrato (id integer, data date, tipo char(1), valor real);
estou tentando criar uma função no PostgreSQL, que me traga os registros, ordenado por data, e calculando o saldo progressivo.
ex:
id, data, tipo, valor, saldo
1, 01-03-2018, C, 100, 100
2, 01-03-2018, D, 50, 50
3, 02-03-2018, C, 500, 550
4, 02-03-2018, D, 300, 250
5, 03-03-2018, D, 300, -50
Criei esta função
CREATE OR REPLACE FUNCTION public.retorna_resumo(date,date)
RETURNS SETOF extrato_financeiro
LANGUAGE 'plpgsql'
COST 100
VOLATILE
ROWS 1000
AS $BODY$
DECLARE resumo extrato_financeiro;
BEGIN
FOR resumo IN select id, data, tipo, valor from extrato where data between $1 and $2 order by data, id
LOOP
IF resumo.tipo = 'C' THEN
resumo.saldo:= resumo.saldo + resumo.valor;
END IF;
IF resumo.tipo = 'D' THEN
resumo.saldo:= resumo.saldo - resumo.valor;
END IF;
RETURN NEXT resumo;
END LOOP;
RETURN;
END;
$BODY$;
A função, até retorna as informações, mas não calcula o SALDO...
Peço ajuda, pois estou travado nisto.
Agradeço
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.