[firebase-br] Problema na Stored Procedure

Eduardo Jedliczka jedyfb em gmail.com
Seg Jun 15 17:38:55 -03 2009


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



Mais detalhes sobre a lista de discussão lista