[firebase-br] ajuda com stored procedure

Carlos - GMail krlosgilson em gmail.com
Dom Mar 11 10:54:38 -03 2012


bom dia! Amigo creio que o problema está no seu primeiro select (o que 
pega o saldo anterior), acho que se vc quer pegar o saldo anterior de um 
determinado período não deve especificar no operador o "=", pois assim 
já está selecionando o saldo da data inicial do laço e assim irá somar o 
mesmo valor duas vezes. Tente alterar de forma que fique assim:

...

   SELECT cast(:pvalor as numeric(10,2)) +
     SUM(CASE WHEN MVC_TIP = 'C' THEN MVC_VAL ELSE -MVC_VAL END)
   FROM
     FID005
   WHERE
     (MVC_DTC IS NOT NULL) and
      (MVC_DTC<  :dt1)
   INTO
     :SALDO_ATLZ;

...

Em 10/03/2012 12:00, lista-request em firebase.com.br escreveu:
> boa noite a todos estou com u m problema pois eu preciso que na
> primeira linha pegue o saldo anterior e some e abata e totalize por
> linhas mais esta dando erro na soma do saldo anterior com
>
> CREATE OR ALTER PROCEDURE MOVIMENTACAO (
>      dt1 date,
>      dt2 date,
>      pvalor numeric(13,2),
>      pemp integer)
> returns (
>      codigo integer,
>      credito numeric(18,4),
>      debito numeric(18,4),
>      saldo_atlz numeric(18,4))
> as
> BEGIN
>    -- o erro ocorre aqui pois deveria pegar saldo da soma do saldo
> anterior com o primeiro lancamento do intervalo porem o valor da
> totalmente diferente
>    SELECT cast(:pvalor as numeric(10,2)) +
>      SUM(CASE WHEN MVC_TIP = 'C' THEN MVC_VAL ELSE -MVC_VAL END)
>    FROM
>      FID005
>    WHERE
>      (MVC_DTC IS NOT NULL) and
>       (MVC_DTC<= :dt1)
>    INTO
>      :SALDO_ATLZ;
>    -- Laço de leitura e envio de registros.
>    FOR SELECT
>          FID_COD,
>          (CASE WHEN MVC_TIP = 'C' THEN MVC_VAL ELSE 0 END),
>          (CASE WHEN MVC_TIP = 'D' THEN MVC_VAL ELSE 0 END)
>        FROM
>          FID005
>        WHERE
>          (MVC_DTC IS NOT NULL)AND
>          (MVC_DTC between :dt1 and :dt2)
>        ORDER BY
>          FID_COD
>        INTO
>          :CODIGO,
>          :CREDITO,
>          :DEBITO
>    DO
>    BEGIN
>      -- Atualiza o saldo.
>      SALDO_ATLZ = SALDO_ATLZ + CREDITO - DEBITO;
>      -- Retorna mais um registro.
>      SUSPEND;
>    END -- FOR
> END
>
> ex: se pvalor recebe 250 e o primeiro valor de credito ou debito fosse
> 118 para credito ou debito o saldo-atlz deveria ser 368 ou 122 porem
> fica em 535 e não sei por que isto




Mais detalhes sobre a lista de discussão lista