RES: [firebase-br] Store Procedure - Esta tá difícil
RAMJ SISTEMAS & CONSULTORIA
jubrovolski em yahoo.com.br
Qui Jan 27 11:14:15 -03 2005
Caro Nilton
Com estas alterações que me passou, pelo menos agora a sp grava o saldo
correto do lançamento, porém ele não executa a atualização dos lançamentos
maiores que a data, ou seja ele não executa o for até o fim do arquivo,
somente no registro atual.
Tem mais alguma dica? Aí vai a sp alterada.
SET TERM ^ ;
CREATE PROCEDURE SALDOCAIXA (
DATA DATE,
CAIXA INTEGER)
AS
DECLARE VARIABLE ULTLANCTO INTEGER;
DECLARE VARIABLE SALDOANT NUMERIC(15,2) = 0;
DECLARE VARIABLE ID INTEGER;
DECLARE VARIABLE TIPO VARCHAR(1);
DECLARE VARIABLE VALOR NUMERIC(15,2);
DECLARE VARIABLE DATAANT DATE;
begin
SALDOANT=0;
select Max(DATALAN) from MOVCAIXA where DATALAN<:DATA and CODCAIXA =
:CAIXA into :DATAANT;
if (:DATAANT IS NOT NULL) then
begin
select Max(NUMLAN) from MOVCAIXA where DATALAN=:DATAANT and CODCAIXA
= :CAIXA into :ultlancto;
select SALDOAT from MOVCAIXA where NUMLAN=:ultlancto into :SALDOANT;
end
else
begin
select Min(DATALAN) from MOVCAIXA where CODCAIXA =:CAIXA into
:DATAANT;
select Min(NUMLAN) from MOVCAIXA where DATALAN=:DATAANT and CODCAIXA
= :CAIXA into :ultlancto;
SALDOANT=0;
end
//O erro deve estar aqui, mas não sei o que fazer. Esta correta a sintaxe do
for?
for select NUMLAN,TIPOLAN,VALORLAN from MOVCAIXA where DATALAN>=:DATA and
CODCAIXA = :CAIXA order by DATALAN,NUMLAN into :ID,:TIPO,:VALOR do
begin
if (:TIPO='C') then begin
SALDOANT=:SALDOANT+:VALOR;
end else begin
SALDOANT=:SALDOANT-:VALOR;
end
update MOVCAIXA set SALDOAT=:SALDOANT where NUMLAN=:ID;
suspend;
end
end
^
SET TERM ; ^
GRANT SELECT,UPDATE ON MOVCAIXA TO PROCEDURE SALDOCAIXA;
GRANT EXECUTE ON PROCEDURE SALDOCAIXA TO SYSDBA;
Trabalho com vários caixas, por isso preciso informar a data e o caixa para
fazer a atualização.
Reuber
Mais detalhes sobre a lista de discussão lista