[firebase-br]  Problema na Stored Procedure
    Jáber S. C. Lima 	 
    cpd em lekagi.com.br
       
    Seg Jun 15 16:23:10 -03 2009
    
    
  
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 ; ^
    
    
Mais detalhes sobre a lista de discussão lista