GARANTIR DESCONTO

Fórum Ajuda com uma SP de Calculos #50093

26/03/2005

0

Olá, tenho uma SP, que procura numa tabela CONTA, q vai fazendo as contas de acordo com o DEBITO e CREDITO, segue minha SP:

SET TERM ^ ;

CREATE PROCEDURE SPCALCULACONTA (
    PCLIENTE INTEGER)
AS
DECLARE VARIABLE VVALOR DECIMAL(15,2);
DECLARE VARIABLE VTIPO CHAR(1);
DECLARE VARIABLE VRECNO INTEGER;
DECLARE VARIABLE VREFAZENDOSALDO CHAR(1);
DECLARE VARIABLE VSALDO DECIMAL(15,2);
DECLARE VARIABLE VCLIENTE CHAR(5);
begin
    select REFAZENDOSALDO from PARAMETRO into :VREFAZENDOSALDO;
    if (VREFAZENDOSALDO = ´N´) then
    begin
        update PARAMETRO set REFAZENDOSALDO = ´S´;

        VSALDO = 0.00;

        for select VALOR  from CONTA
          where CLIENTE = :PCLIENTE order by DATA
        into :VRECNO do
        begin
            select VALOR, CLIENTE, TIPO from CONTA where RECNO = :VRECNO into :VVALOR, :VCLIENTE, :VTIPO;

            if (:VTIPO = ´C´) then
            begin
              VSALDO = :VSALDO + :VVALOR;
            end
            else
            begin
              VSALDO = :VSALDO - :VVALOR;
            end

            update CONTA set
              VALORATUAL = :VSALDO
            where RECNO = :VRECNO;
        end

        update CLIENTE set
          SALDOCONTA = :VSALDO
        where CLIENTE = :VCLIENTE;

        update PARAMETRO set REFAZENDOSALDO = ´N´;
    end
  suspend;
end
^

SET TERM ; ^

GRANT SELECT,UPDATE ON PARAMETRO TO PROCEDURE SPCALCULACONTA;

GRANT SELECT,UPDATE ON CONTA TO PROCEDURE SPCALCULACONTA;

GRANT SELECT,UPDATE ON CLIENTE TO PROCEDURE SPCALCULACONTA;

GRANT EXECUTE ON PROCEDURE SPCALCULACONTA TO SYSDBA;


Pois bem, ela não calcula nada... não dá certo...


há algo de errado?


desde ja agradeco

[]s


Titanius

Titanius

Responder

Posts

26/03/2005

Titanius

olá, fiz algumas mudancas... mas ainda nao funciona!

 select REFAZENDOSALDO from PARAMETRO into :VREFAZENDOSALDO;
    if (VREFAZENDOSALDO = ´N´) then
    begin
        update PARAMETRO set REFAZENDOSALDO = ´S´;

        VSALDO = 0.00;

        for select RECNO  from CONTA
          where CLIENTE = :PCLIENTE order by DATA
        into :VRECNO do
        begin
            exception entrada;

            select VALOR, CLIENTE, TIPO from CONTA
               where RECNO = :VRECNO
            into :VVALOR, :VCLIENTE, :VTIPO;

            if (:VTIPO = ´C´) then
            begin
              VSALDO = :VSALDO + :VVALOR;
            end
            else
            begin
              VSALDO = :VSALDO - :VVALOR;
            end

            update CONTA set
              VALORATUAL = :VSALDO
            where RECNO = :VRECNO;
        end

        exception saida;

          update CLIENTE set
            SALDOCONTA = :VSALDO
          where CLIENTE = :VCLIENTE;


        update PARAMETRO set REFAZENDOSALDO = ´N´;
    end
  suspend;



Responder

Gostei + 0

26/03/2005

Titanius

consegui... valeu...
o problema era na especificacao da variavel..


[]s


Responder

Gostei + 0

26/03/2005

Titanius

É.. minha felicidade durou pouco... agora minha SP entra no [b:388c778358]for select[/b:388c778358], porem dá outro erro...



[b:388c778358]Unsuccessful execution caused by system error that does not preclude successful execution of subsequent statements.
message length error (encountered 6, expected 8).[/b:388c778358]


vixi, perdi a cabeça, nao sei o que esta acontecendo...

o novo codigo ficou assim:

SET TERM ^ ;

CREATE PROCEDURE SPCALCULACONTA (
    PCLIENTE CHAR(5))
AS
DECLARE VARIABLE VVALOR DECIMAL(15,2);
DECLARE VARIABLE VTIPO CHAR(1);
DECLARE VARIABLE VRECNO INTEGER;
DECLARE VARIABLE VREFAZENDOSALDO CHAR(1);
DECLARE VARIABLE VSALDO DECIMAL(15,2);
DECLARE VARIABLE VCLIENTE CHAR(5);
begin
    select REFAZENDOSALDO from PARAMETRO into :VREFAZENDOSALDO;
    if (VREFAZENDOSALDO = ´N´) then
    begin
        update PARAMETRO set REFAZENDOSALDO = ´S´;

        VSALDO = 0.00;

        for select RECNO  from CONTA
          where CLIENTE = :PCLIENTE order by DATA
        into :VRECNO do
        begin
            select VALOR, CLIENTE, TIPO from CONTA
               where RECNO = :VRECNO
            into :VVALOR, :VCLIENTE, :VTIPO;

            if (:VTIPO = ´C´) then
            begin
              VSALDO = :VSALDO + :VVALOR;
            end
            else
            begin
              VSALDO = :VSALDO - :VVALOR;
            end

            update CONTA set
              VALORATUAL = :VSALDO
            where RECNO = :VRECNO;
        end

          update CLIENTE set
            SALDOCONTA = :VSALDO
          where CLIENTE = :VCLIENTE;


        update PARAMETRO set REFAZENDOSALDO = ´N´;
    end
  suspend;
end
^

SET TERM ; ^

GRANT SELECT,UPDATE ON PARAMETRO TO PROCEDURE SPCALCULACONTA;

GRANT SELECT,UPDATE ON CONTA TO PROCEDURE SPCALCULACONTA;

GRANT SELECT,UPDATE ON CLIENTE TO PROCEDURE SPCALCULACONTA;

GRANT EXECUTE ON PROCEDURE SPCALCULACONTA TO SYSDBA;



Responder

Gostei + 0

27/03/2005

Emerson Nascimento

tente assim:

SET TERM ^ ; 

CREATE PROCEDURE SPCALCULACONTA ( PCLIENTE CHAR(5) )
AS 
  DECLARE VARIABLE VVALOR DECIMAL(15,2); 
  DECLARE VARIABLE VTIPO CHAR(1); 
  DECLARE VARIABLE VRECNO INTEGER; 
  DECLARE VARIABLE VREFAZENDOSALDO CHAR(1); 
  DECLARE VARIABLE VSALDO DECIMAL(15,2); 
  DECLARE VARIABLE VCLIENTE CHAR(5); 
begin 
  select REFAZENDOSALDO from PARAMETRO into :VREFAZENDOSALDO; 

  if (VREFAZENDOSALDO = ´N´) then 
  begin 
    update PARAMETRO set REFAZENDOSALDO = ´S´; 

    VSALDO = 0.00; 

    for select RECNO, VALOR, TIPO 
        from CONTA 
        where CLIENTE = :PCLIENTE
        order by DATA 
    into :VRECNO, :VVALOR, :VTIPO do
    begin 
      if (:VTIPO = ´C´) then 
        VSALDO = :VSALDO + :VVALOR
      else 
        VSALDO = :VSALDO - :VVALOR; 

      update CONTA set VALORATUAL = :VSALDO 
      where RECNO = :VRECNO AND CLIENTE = :PCLIENTE;
    end 

    update CLIENTE set SALDOCONTA = :VSALDO 
    where CLIENTE = :PCLIENTE;

    update PARAMETRO set REFAZENDOSALDO = ´N´; 
  end 
end 
^ 

SET TERM ; ^ 

GRANT SELECT,UPDATE ON PARAMETRO TO PROCEDURE SPCALCULACONTA; 

GRANT SELECT,UPDATE ON CONTA TO PROCEDURE SPCALCULACONTA; 

GRANT SELECT,UPDATE ON CLIENTE TO PROCEDURE SPCALCULACONTA; 

GRANT EXECUTE ON PROCEDURE SPCALCULACONTA TO SYSDBA;



Responder

Gostei + 0

28/03/2005

Titanius

Blz, obrigado ...

Resolvi inserindo mais um campo chamado TP, que se for C insiro 1 e se for D insiro -1, aih eu multiplico...

VSALDO = :VSALDO * new.TP;


funcionou blz... :D

obrigado!

[]s


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar