Ajuda para montar procedure ..
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 [b:d9383a009e]CAIXA[/b:d9383a009e] com os seguintes campos
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:
Observem que a coluna saldo é calculada linha a linha..No paradox eu utilizava uma Query com a seguinte instrução:
Mas descobri 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
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 [b:d9383a009e]CAIXA[/b:d9383a009e] 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/11/2005 87 250,00 250,00 01/11/2005 88 200,00 200,00 01/11/2005 89 200,00 200,00 01/11/2005 99 -435,00 435,00 04/11/2005 91 300,00 300,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 descobri 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
Faustoalves
Curtidas 0
Respostas
Catunda
25/10/2006
CREATE PROCEDURE CAIXA (
DATA1 DATE,
DATA2 DATE)
RETURNS (
DATA DATE,
LAN INTEGER,
VALOR NUMERIC(15,2),
SALDO NUMERIC(15,2))
AS
begin
saldo=0;
for select caidat,cailan,sum(caival) from caixa
where (caidat>=:data1 and caidat<=:data2)
group by caidat,cailan
order by caidat,cailan
into :dia,:cmda,:total do
begin
saldo=:saldo+:total;
suspend;
end
end
DATA1 DATE,
DATA2 DATE)
RETURNS (
DATA DATE,
LAN INTEGER,
VALOR NUMERIC(15,2),
SALDO NUMERIC(15,2))
AS
begin
saldo=0;
for select caidat,cailan,sum(caival) from caixa
where (caidat>=:data1 and caidat<=:data2)
group by caidat,cailan
order by caidat,cailan
into :dia,:cmda,:total do
begin
saldo=:saldo+:total;
suspend;
end
end
GOSTEI 0
Catunda
25/10/2006
desculpe .. na procedure enviada esqueci de alterar a linha do INTO e a da incrementação do SALDO. Então ficaria:
CREATE PROCEDURE CAIXA (DATA1 DATE, DATA2 DATE)
RETURNS (DATA DATE, LAN INTEGER, VALOR NUMERIC(15,2),
SALDO NUMERIC(15,2))
AS
begin
saldo=0;
for select caidat,cailan,sum(caival) from caixa
where (caidat>=:data1 and caidat<=:data2)
group by caidat,cailan
order by caidat,cailan
into :data,:lan,:valor do
begin
saldo=:saldo+:valor;
suspend;
end
end
CREATE PROCEDURE CAIXA (DATA1 DATE, DATA2 DATE)
RETURNS (DATA DATE, LAN INTEGER, VALOR NUMERIC(15,2),
SALDO NUMERIC(15,2))
AS
begin
saldo=0;
for select caidat,cailan,sum(caival) from caixa
where (caidat>=:data1 and caidat<=:data2)
group by caidat,cailan
order by caidat,cailan
into :data,:lan,:valor do
begin
saldo=:saldo+:valor;
suspend;
end
end
GOSTEI 0
Faustoalves
25/10/2006
Amigo muitíssimo obrigado..
era exatamente disso que estava precisando..
Valeu
Fausto
era exatamente disso que estava precisando..
Valeu
Fausto
GOSTEI 0