Fórum Ajuda com uma SP de Calculos #50093
26/03/2005
0
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
Curtir tópico
+ 0Posts
26/03/2005
Titanius
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;
Gostei + 0
26/03/2005
Titanius
o problema era na especificacao da variavel..
[]s
Gostei + 0
26/03/2005
Titanius
[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;
Gostei + 0
27/03/2005
Emerson Nascimento
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;
Gostei + 0
28/03/2005
Titanius
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
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)