Fórum Erro na Store Procedure #369945
24/04/2009
0
Estou utilizando INTERBASE, D7.
Qdo executo esta SQL :
da um erro de aritmetc overflow e mostra so a primeira linha SALDO ANTERIOR.
SEGUE O SP:
CREATE PROCEDURE MOVIMENTOFLUXOCAIXA(
DATAINICIAL DATE)
RETURNS(
CAILAN INTEGER,
CAIDAT DATE,
CAITIP CHAR(1) CHARACTER SET NONE,
CAIHIS VARCHAR(40) CHARACTER SET NONE,
CAIVAL NUMERIC(18, 2),
SALDO NUMERIC(18, 2))
AS
DECLARE VARIABLE DEBITO DOUBLE PRECISION;
DECLARE VARIABLE CREDITO DOUBLE PRECISION;
DECLARE VARIABLE SALDOATUAL DOUBLE PRECISION;
BEGIN
select Sum(CPR.ValorOriginal) from ContasPagarReceber CPR
Inner Join Contas co on co.CodConta = CPR.CodConta
Inner Join GrupoContas gc on gc.CodGrupoConta = co.CodGrupo
Where gc.TipoConta = 1 AND CPR.DataVencimento < :DATAINICIAL into :DEBITO;
select Sum(CPR.ValorOriginal) from ContasPagarReceber CPR
Inner Join Contas co on co.CodConta = CPR.CodConta
Inner Join GrupoContas gc on gc.CodGrupoConta = co.CodGrupo
Where gc.TipoConta = 2 AND CPR.DataVencimento < :DATAINICIAL into :CREDITO;
SALDOATUAL =CREDITO - DEBITO;
CAILAN =0 ;
CAIDAT = DATAINICIAL - 1;
CAITIP = ´´;
CAIHIS = ´SALDO ANTERIOR´;
CAIVAL = SALDOATUAL;
SALDO = SALDOATUAL;
suspend;
for select
CPR.CODCONTASPAGARRECEBER,CPR.DATAVENCIMENTO,GC.TIPOCONTA,CPR.HISTORICO,CPR.VALORORIGINAL,CPR.VALORORIGINAL from
CONTASPAGARRECEBER CPR
Inner Join Contas co on co.CodConta = CPR.CodConta
Inner Join GrupoContas gc on gc.CodGrupoConta = co.CodGrupo
where CPR.DATAVENCIMENTO >= :DATAINICIAL order by CPR.DATAVENCIMENTO,CPR.CODCONTASPAGARRECEBER into
:CAILAN,:CAIDAT,:CAITIP,:CAIHIS,:CAIVAL,:SALDO do
begin
if (CAITIP = ´2´) then SALDO = SALDOATUAL + :CAIVAL;
if (CAITIP = ´1´) then SALDO = SALDOATUAL - :CAIVAL;
SALDOATUAL = :SALDO;
suspend;
end
END
Qdo executo esta SQL :
da um erro de aritmetc overflow e mostra so a primeira linha SALDO ANTERIOR.
SEGUE O SP:
CREATE PROCEDURE MOVIMENTOFLUXOCAIXA(
DATAINICIAL DATE)
RETURNS(
CAILAN INTEGER,
CAIDAT DATE,
CAITIP CHAR(1) CHARACTER SET NONE,
CAIHIS VARCHAR(40) CHARACTER SET NONE,
CAIVAL NUMERIC(18, 2),
SALDO NUMERIC(18, 2))
AS
DECLARE VARIABLE DEBITO DOUBLE PRECISION;
DECLARE VARIABLE CREDITO DOUBLE PRECISION;
DECLARE VARIABLE SALDOATUAL DOUBLE PRECISION;
BEGIN
select Sum(CPR.ValorOriginal) from ContasPagarReceber CPR
Inner Join Contas co on co.CodConta = CPR.CodConta
Inner Join GrupoContas gc on gc.CodGrupoConta = co.CodGrupo
Where gc.TipoConta = 1 AND CPR.DataVencimento < :DATAINICIAL into :DEBITO;
select Sum(CPR.ValorOriginal) from ContasPagarReceber CPR
Inner Join Contas co on co.CodConta = CPR.CodConta
Inner Join GrupoContas gc on gc.CodGrupoConta = co.CodGrupo
Where gc.TipoConta = 2 AND CPR.DataVencimento < :DATAINICIAL into :CREDITO;
SALDOATUAL =CREDITO - DEBITO;
CAILAN =0 ;
CAIDAT = DATAINICIAL - 1;
CAITIP = ´´;
CAIHIS = ´SALDO ANTERIOR´;
CAIVAL = SALDOATUAL;
SALDO = SALDOATUAL;
suspend;
for select
CPR.CODCONTASPAGARRECEBER,CPR.DATAVENCIMENTO,GC.TIPOCONTA,CPR.HISTORICO,CPR.VALORORIGINAL,CPR.VALORORIGINAL from
CONTASPAGARRECEBER CPR
Inner Join Contas co on co.CodConta = CPR.CodConta
Inner Join GrupoContas gc on gc.CodGrupoConta = co.CodGrupo
where CPR.DATAVENCIMENTO >= :DATAINICIAL order by CPR.DATAVENCIMENTO,CPR.CODCONTASPAGARRECEBER into
:CAILAN,:CAIDAT,:CAITIP,:CAIHIS,:CAIVAL,:SALDO do
begin
if (CAITIP = ´2´) then SALDO = SALDOATUAL + :CAIVAL;
if (CAITIP = ´1´) then SALDO = SALDOATUAL - :CAIVAL;
SALDOATUAL = :SALDO;
suspend;
end
END
Walter Faria
Curtir tópico
+ 0
Responder
Posts
27/04/2009
Emarcolongo
aritmetc overflow ocorre porque alguma operação não esta conseguindo ser feita, por ser por exemplo uma divisão por zero, talvez um resultado não suportado, etc.
tente fazer um teste de mesa para validar seus dados.
o que pode ocorrer tb. é vc tentar armazenar uma qtde de
caracteres maior que o campo suporte, por exemplo, vc
esta passando ´SAO PAULO´ para um campo varchar ou char de 1 posição.
tente fazer um teste de mesa para validar seus dados.
o que pode ocorrer tb. é vc tentar armazenar uma qtde de
caracteres maior que o campo suporte, por exemplo, vc
esta passando ´SAO PAULO´ para um campo varchar ou char de 1 posição.
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)