[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