Olá Pessoal,

A Procedure abaixo está dando o seguinte erro:

Overflow occurred during data type conversion.
conversion error from string "1968".
At procedure 'DEVOLUCAO_DIR'.

Acho que o problema é a :DTINI01 e a :DTINI02

Não sei o que mais fazer.

Desde já agradeço



CREATE OR ALTER PROCEDURE DEVOLUCAO_DIR (
    dtini01 date,
    dtfim01 date,
    cod_ven integer,
    cod_pro integer,
    fabrica char(1),
    tp char(1),
    dtfim02 date,
    ano smallint)
returns (
    razao varchar(50),
    jan float,
    fev float,
    mar float,
    abr float,
    mai float,
    jun float,
    jul float,
    ago float,
    seb float,
    out float,
    nov float,
    dez float,
    janm float,
    fevm float,
    marm float,
    abrm float,
    totcompr float,
    totmedia float,
    totdevol float,
    percentu float)
as
declare variable vend integer;
declare variable qtde float;
declare variable mes smallint;
declare variable codc integer;
declare variable tipo varchar(15);
declare variable codsql1 varchar(1030);
declare variable codsql2 varchar(1030);
begin
  CODSQL1 = 'Select TBCLIENTE.COD_CLIENTE, Extract(Month From DTDOC) AS 
MES,SUM(QTDE) AS QTDE From TBNFISCAL,
            TBNFMOV,TBCLIENTE Where TBNFISCAL.NRLAN = TBNFMOV.NRLAN  AND
            TBNFISCAL.DTDOC Between CAST('||:DTINI01||' as DATE) AND 
CAST('||:DTFIM01||' as DATE) AND TBNFISCAL.TDOC = ''ANL''';
  if (COD_VEN > 0) then
    CODSQL1 = CODSQL1 ||' AND TBCLIENTE.COD_VEND = CAST('|| :COD_VEN ||' as 
integer) AND TBNFISCAL.COD_CLIENTE = TBCLIENTE.COD_CLIENTE';
  else
    CODSQL1 = CODSQL1 ||' AND TBNFISCAL.COD_CLIENTE = TBCLIENTE.COD_CLIENTE';

  if (COD_PRO > 0) then
    CODSQL1 = CODSQL1 ||' TBNFMOV.COD_PRO = CAST('|| :COD_PRO ||' as integer)';

  CODSQL1 = CODSQL1 ||' Group By TBCLIENTE.COD_CLIENTE,2
Order By TBCLIENTE.COD_CLIENTE,2';

  FOR EXECUTE STATEMENT
    CODSQL1
    Into :VEND, :MES, :QTDE
    Do
      begin
        if (MES = 1) then
          begin
            JAN = QTDE;
            Select Sum(QTDE) /12 From TBNFISCAL,TBNFMOV,TBPRODUTO Where 
TBNFISCAL.NRLAN = TBNFMOV.NRLAN AND
            TBPRODUTO.COD_PRO = TBNFMOV.COD_PRO AND
            Extract(Month from DTDOC) >= 1  AND DTDOC <= :DTFIM02 AND 
Extract(YEAR from DTDOC) = :ANO
            AND TBNFISCAL.TDOC = 'VEN' AND TBPRODUTO.TPROD = 'BATERIA'
            into :JANM;
          end
        else if (MES = 2) then
          begin
            FEV = QTDE;
            Select Sum(QTDE) /12 From TBNFISCAL,TBNFMOV,TBPRODUTO Where 
TBNFISCAL.NRLAN = TBNFMOV.NRLAN AND
            TBPRODUTO.COD_PRO = TBNFMOV.COD_PRO AND
            Extract(Month from DTDOC) >= 2  AND DTDOC <= :DTFIM02 AND 
Extract(YEAR from DTDOC) = :ANO
            and TBNFISCAL.TDOC = 'VEN' AND TBPRODUTO.TPROD = 'BATERIA'
            into :FEVM;
          end
        else if (MES = 3) then
          begin
            MAR = QTDE;
            Select Sum(QTDE) /12 From TBNFISCAL,TBNFMOV,TBPRODUTO Where 
TBNFISCAL.NRLAN = TBNFMOV.NRLAN AND
            TBPRODUTO.COD_PRO = TBNFMOV.COD_PRO AND
            Extract(Month from DTDOC) >= 3  AND DTDOC <= :DTFIM02 AND 
Extract(YEAR from DTDOC) = :ANO
            and TBNFISCAL.TDOC = 'VEN' AND TBPRODUTO.TPROD = 'BATERIA'
            into :MARM;
          end
        else if (MES = 4) then
          begin
            ABR = QTDE;
            Select Sum(QTDE) /12 From TBNFISCAL,TBNFMOV,TBPRODUTO Where 
TBNFISCAL.NRLAN = TBNFMOV.NRLAN AND
            TBPRODUTO.COD_PRO = TBNFMOV.COD_PRO AND
            Extract(Month from DTDOC) >= 4  AND DTDOC <= :DTFIM02 AND 
Extract(YEAR from DTDOC) = :ANO
            and TBNFISCAL.TDOC = 'VEN' AND TBPRODUTO.TPROD = 'BATERIA'
            into :ABRM;
          end
        else if (MES = 5) then
          begin
            MAI = QTDE;
            Select Sum(QTDE) /12 From TBNFISCAL,TBNFMOV,TBPRODUTO Where 
TBNFISCAL.NRLAN = TBNFMOV.NRLAN AND
            TBPRODUTO.COD_PRO = TBNFMOV.COD_PRO AND
            Extract(Month from DTDOC) >= 5  AND DTDOC <= :DTFIM02 AND 
Extract(YEAR from DTDOC) = :ANO
            and TBNFISCAL.TDOC = 'VEN' AND TBPRODUTO.TPROD = 'BATERIA'
            into :MAIM;
          end
        else if (MES = 6) then
          JUN = QTDE;
        else if (MES = 7) then
          JUL = QTDE;
        else if (MES = 8) then
          AGO = QTDE;
        else if (MES = 9) then
          SEB = QTDE;
        else if (MES = 10) then
          OUT = QTDE;
        else if (MES = 11) then
          NOV = QTDE;
        else if (MES = 12) then
          DEZ = QTDE;
      end

end^

SET TERM ; ^


[As partes desta mensagem que não continham texto foram removidas]

Responder a