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