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]