RES: [firebase-br] Ajuda para montar um SP que calcule saldo diário..
José Aparecido da Silva
joseasilva em bol.com.br
Qua Out 25 14:41:14 -03 2006
Segue o código para a SP. Espero que funcione. Me reporte algum erro
Use assim SELECT * from PROC_MOVI(:datainicial) onde datainicial é o
parametro para a procedure ;
********************************************
SET TERM ^ ;
CREATE PROCEDURE PROC_MOVI (
DATAINICIAL DATE)
RETURNS (
CAILAN INTEGER,
CAIDAT DATE,
CAITIP CHAR(1),
CAIHIS VARCHAR(40),
CAIVAL NUMERIC(12,),
SALDO NUMERIC(12,2))
AS
DECLARE VARIABLE DEBITO DOUBLE PRECISION;
DECLARE VARIABLE CREDITO DOUBLE PRECISION;
DECLARE VARIABLE SALDOATUAL DOUBLE PRECISION;
begin
select sum(movi.CAIVAL) from CAIXA movi where movi.CAITIP = 'D' and
movi.CAIDAT < :DATAINICIAL into :DEBITO;
select sum(movi.CAIVAL) from CAIXA movi where movi.CAITIP = 'C' and
movi.CAIDAT < :DATAINICIAL into :CREDITO;
SALDOATUAL =coalesce(CREDITO,0) - coalesce(DEBITO,0) ;
CAILAN =0 ;
CAIDAT = DATAINICIAL - 1;
CAITIP = '';
CAIHIS = 'SALDO ANTERIOR';
CAIVAL = SALDOATUAL;
SALDO = SALDOATUAL;
suspend;
for select
CAILAN,CAIDAT,CAITIP,CAIHIS,COALESCE(CAIVAL,0),COALESCE(CAIVAL,0) from CAIXA
where CAIDAT >= :DATAINICIAL order by CAIDAT,CAILAN into
:CAILAN,:CAIDAT,:CAITIP,:CAIHIS,:CAIVAL,:SALDO do
begin
if (CAITIP = 'C') then SALDO = SALDOATUAL + :CAIVAL;
if (CAITIP = 'D') then SALDO = SALDOATUAL - :CAIVAL;
SALDOATUAL = :SALDO;
suspend;
end
end
^
SET TERM ; ^
GRANT SELECT ON CAIXA TO PROCEDURE PROC_MOVI;
GRANT EXECUTE ON PROCEDURE PROC_MOVI TO SYSDBA;
-----Mensagem original-----
De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
nome de Fausto
Enviada em: quarta-feira, 25 de outubro de 2006 15:04
Para: FireBase
Assunto: [firebase-br] Ajuda para montar um SP que calcule saldo diário..
Boa tarde gente..
Agora estou apelando mesmo..
Estou precisando de uma ajuda para escrever uma stored procedure
retornável que calcule o saldo diário,tal qual extrato bancário.
Tenho a tabela CAIXA com os seguintes campos
CAIDAT DATE NOT NULL : Data de lançamento
CAILAN INTEGER NOT NULL : PK AutoIncremento via generator
CAIHIS VARCHAR(40) : Histórico
CAIVAL NUMERIC(12,2): Valor
CAITIP CHAR(1):Informa se é Débito ou Crédito (D/C)
Preciso desenvolver uma procedure que me retorne estes campos da tabela
CAIXA, mais uma terceira coluna que seria o calculo do saldo atual,
entre duas datas.
De tal forma que o resultado fosse este:
Data Lan Valor Saldo
01/10/2005 87 250,00 250,00
01/10/2005 88 200,00 450,00
01/10/2005 89 200,00 650,00
01/10/2005 99 -435,00 215,00
04/10/2005 91 300,00 515,00
Observem que a coluna saldo é calculada linha a linha..No paradox eu
utilizava uma Query com a seguinte instrução:
SELECT CAIDAT, CAILAN, CAIVAL, sum (DISTINCT CAIVAL)
FROM CAIXA
GROUP BY CAIDAT,CAILAN,CAIVAL
Mas os amigos Eduardo Jedliczka e Kleber Caneva, me responderam que no
FIREBIRD a clausula distinct utiliza toda uma linha e não somente para
função SUM.
Portanto se alguém puder me ajudar com a construção desta SP, ou tenha algo
já pronto e puder me ceder ficarei eternamente grato.
Fausto
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para editar sua configuração na lista, use o endereço
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa
Mais detalhes sobre a lista de discussão lista