[firebase-br] Res: Re: Problema na Stored Procedure

Jáber S. C. Lima cpd em lekagi.com.br
Seg Jun 15 17:09:36 -03 2009


Grande Eduardo... 

Alterei a variável WAno para Numeric(4,0) como você me indicou mas o
problema persiste... 

Quanto da data relativa a fevereiro, por enquanto estou controlando isso na
minha aplicação, mas assim que resolver esse "perrengue" vou implementar na
SP. 

Mais um vez obrigado.. 

 

Abraço... 

 

-------Mensagem original------- 

 

De: Eduardo Jedliczka 

Data: 15/06/2009 17:59:24 

Para: FireBase 

Assunto: Re: [firebase-br] Problema na Stored Procedure 

 

Defina a variável WANO como numeric(4,0) 

 

Outra coisa, verifique se não está gerando alguma data inválida, por 

exemplo 30 de fevereiro ou 31 de abril. 

 

Abraço 

 

Eduardo 

 

Em Seg, 2009-06-15 às 16:23 -0300, Jáber S. C. Lima escreveu: 

 

> Olá pessoal. 

> 

> 

> 

> A seguinte Stored Procedure serve para gravar as contas a pagar que são 

> parceladas no meu sistema. 

> 

> Ontem descobri um erro e não consegui resolver... Quando se lança uma
conta 

> a pagar em até 99 parcelas a SP funciona 100%. Quando as parcelas são
acima 

> de 99 ele gera a seguinte mensagem de erro: 

> 

> 

> 

> {Arithmetic overflow or division by zero has occurred. 

> 

> arithmetic exception, numeric overflow, or string truncation. 

> 

> At procedure 'SET_GRAVAPARCELAS' line: 32, col: 9.} 

> 

> 

> 

> Segue abaixo a DDL da SP. 

> 

> 

> 

> Grato a todos que puder ajudar.. 

> 

> 

> 

> Jáber S. C. Lima - Rondonópolis/MT 

> 

> 

> 

> SET TERM ^ ; 

> 

> 

> 

> create or alter procedure SET_GRAVAPARCELAS ( 

> 

> EMPRESA integer, 

> 

> NRDOC varchar(40), 

> 

> CODFORNECE integer, 

> 

> NOMEFORNECE varchar(80), 

> 

> CODGRUPOCENTCUST integer, 

> 

> CODCENTCUST integer, 

> 

> DTCADASTRO date, 

> 

> DTDOCTO date, 

> 

> DTVENCTO date, 

> 

> VALOR D_MONEY not null, 

> 

> DESCTO D_PERCENT not null, 

> 

> TOTAL D_MONEY not null, 

> 

> PARCELA varchar(6), 

> 

> CONDFUNCCAD integer, 

> 

> QUITADO char(1), 

> 

> OBSERVACOES varchar(80)) 

> 

> as 

> 

> declare variable WDIA numeric(2,0); 

> 

> declare variable WMES numeric(2,0); 

> 

> declare variable WANO numeric(2,0); 

> 

> declare variable WPARCELAS numeric(6,0); 

> 

> declare variable WDATA date; 

> 

> begin 

> 

> select extract(day from :dtvencto) from rdb$database into :wDia; 

> 

> select extract(month from :dtvencto) from rdb$database into :wMes; 

> 

> select extract(year from :dtvencto) from rdb$database into :wAno ; 

> 

> wParcelas = 1; 

> 

> while (wParcelas <= cast(:parcela as integer)) do 

> 

> begin 

> 

> wData = cast(cast(wMes as varchar(2)) || '/' || cast(wDia as 

> varchar(2)) || '/' || cast(wAno as varchar(4)) as date); /*Aqui fica a
linha 

> 32 */ 

> 

> insert into tbl_pagar (EMPRESA, NRDOC, CODFORNECE, NOMEFORNECE, 

> CODGRUPOCENTCUST, CODCENTCUST, DTCADASTRO, DTDOCTO, DTVENCTO, VALOR,
DESCTO, 

> TOTAL, PARCELA, CONDFUNCCAD, QUITADO, OBSERVACOES) 

> 

> VALUES (:EMPRESA,:NRDOC,:CODFORNECE,:NOMEFORNECE 

> :CODGRUPOCENTCUST,:CODCENTCUST,:DTCADASTRO,:DTDOCTO,:WData,:VALOR,:DESCTO 

> :TOTAL, :WPARCELAS||'/'||:parcela,:CONDFUNCCAD,:QUITADO,:OBSERVACOES); 

> 

> wParcelas = wParcelas + 1; 

> 

> wMes = wMes + 1; 

> 

> if (wMes >12) then 

> 

> begin 

> 

> wMes = 1; 

> 

> wAno = wAno + 1; 

> 

> end 

> 

> end 

> 

> end^ 

> 

> 

> 

> SET TERM ; ^ 

> 

> ______________________________________________ 

> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br 

> Para saber como gerenciar/excluir seu cadastro na lista, use: http://www
firebase.com.br/fb/artigo.php?id=1107 

> Para consultar mensagens antigas: http://firebase.com.br/pesquisa 

______________________________________________ 

FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br 

Para saber como gerenciar/excluir seu cadastro na lista, use: http://www
firebase.com.br/fb/artigo.php?id=1107 

Para consultar mensagens antigas: http://firebase.com.br/pesquisa




Mais detalhes sobre a lista de discussão lista