[firebase-br] [Firebase-Br] Problema de arithmetic overflow em select
Humberto S. Reis
hsreisjr em gmail.com
Qua Fev 23 12:00:59 -03 2011
Pessoal bom dia
Mudei os tipos de campos da tabela abaixo de:
CREATE TABLE ITEMMOVIMENTACAOPRODUTO (
COD_MOVIMENTACAO DM_CODIGO NOT NULL /* DM_CODIGO = INTEGER
DEFAULT 0 NOT NULL */,
TIPOMOVIMENTACAO DM_CHAR01 NOT NULL /* DM_CHAR01 = CHAR(1) */,
CODIGO DM_CODIGO NOT NULL /* DM_CODIGO = INTEGER
DEFAULT 0 NOT NULL */,
VALORUNITARIO DM_MOEDA5 DEFAULT 0 NOT NULL /* DM_MOEDA5 =
NUMERIC(15,5) DEFAULT 0 NOT NULL */,
QUANTIDADE T_CURRENCY DEFAULT 0 NOT NULL /* T_CURRENCY =
NUMERIC(18,4) DEFAULT 0 NOT NULL */,
VALORITEM DM_MOEDA /* DM_MOEDA = NUMERIC(15,2) DEFAULT 0
NOT NULL */,
TIPODESCONTO DM_CHAR01 /* DM_CHAR01 = CHAR(1) */,
VALORRATEIO DM_ZERO DEFAULT 0 NOT NULL /* DM_ZERO = DOUBLE
PRECISION DEFAULT 0 NOT NULL */,
VALORRATEIO_FRETE DM_ZERO /* DM_ZERO = DOUBLE PRECISION DEFAULT 0
NOT NULL */,
VALORRATEIO_SEGURO DM_MOEDA /* DM_MOEDA = NUMERIC(15,2) DEFAULT 0
NOT NULL */,
SALDOANTERIOR DM_ZERO DEFAULT 0 /* DM_ZERO = DOUBLE PRECISION
DEFAULT 0 NOT NULL */,
VALORDESCONTO T_CURRENCY DEFAULT 0 NOT NULL /* T_CURRENCY =
NUMERIC(18,4) DEFAULT 0 NOT NULL */,
VALORCUSTO T_CURRENCY DEFAULT 0 /* T_CURRENCY =
NUMERIC(18,4) DEFAULT 0 NOT NULL */,
VALORICMSSUBSTITUIDO T_CURRENCY /* T_CURRENCY = NUMERIC(18,4)
DEFAULT 0 NOT NULL */,
VALORDESPAC DM_MOEDA /* DM_MOEDA = NUMERIC(15,2) DEFAULT 0
NOT NULL */);
Para:
CREATE TABLE ITEMMOVIMENTACAOPRODUTO (
COD_MOVIMENTACAO DM_CODIGO NOT NULL /* DM_CODIGO = INTEGER
DEFAULT 0 NOT NULL */,
TIPOMOVIMENTACAO DM_CHAR01 NOT NULL /* DM_CHAR01 = CHAR(1) */,
CODIGO DM_CODIGO NOT NULL /* DM_CODIGO = INTEGER
DEFAULT 0 NOT NULL */,
VALORUNITARIO DM_MOEDA5 DEFAULT 0 NOT NULL /* DM_MOEDA5 =
NUMERIC(15,5) DEFAULT 0 NOT NULL */,
QUANTIDADE T_CURRENCY DEFAULT 0 NOT NULL /* T_CURRENCY =
NUMERIC(18,4) DEFAULT 0 NOT NULL */,
VALORITEM DM_MOEDA /* DM_MOEDA = NUMERIC(15,2) DEFAULT 0
NOT NULL */,
TIPODESCONTO DM_CHAR01 /* DM_CHAR01 = CHAR(1) */,
VALORRATEIO DM_MOEDA DEFAULT 0 NOT NULL /* DM_MOEDA =
NUMERIC(15,2) DEFAULT 0 NOT NULL */, <<<<Mudança>>>>
VALORRATEIO_FRETE DM_MOEDA /* DM_MOEDA = NUMERIC(15,2) DEFAULT 0
NOT NULL */, <<<<Mudança>>>>
VALORRATEIO_SEGURO DM_MOEDA /* DM_MOEDA = NUMERIC(15,2) DEFAULT 0
NOT NULL */,
SALDOANTERIOR DM_ZERO DEFAULT 0 /* DM_ZERO = DOUBLE PRECISION
DEFAULT 0 NOT NULL */,
VALORDESCONTO T_CURRENCY DEFAULT 0 NOT NULL /* T_CURRENCY =
NUMERIC(18,4) DEFAULT 0 NOT NULL */,
VALORCUSTO T_CURRENCY DEFAULT 0 /* T_CURRENCY =
NUMERIC(18,4) DEFAULT 0 NOT NULL */,
VALORICMSSUBSTITUIDO T_CURRENCY /* T_CURRENCY = NUMERIC(18,4)
DEFAULT 0 NOT NULL */,
VALORDESPAC DM_MOEDA /* DM_MOEDA = NUMERIC(15,2) DEFAULT 0
NOT NULL */);
Depois disso, o cálculo da MARGEM, no select abaixo, está dando erro de
arithmetic overflow or string truncation
select /*MARGEM*/
cast((((IMP.VALORUNITARIO-IMP.VALORDESCONTO) * IMP.QUANTIDADE)+
IMP.VALORRATEIO+
IMP.VALORRATEIO_FRETE+
IMP.VALORRATEIO_SEGURO+
IMP.VALORICMSSUBSTITUIDO) -
(IMP.QUANTIDADE * IMP.VALORCUSTO) /
(((IMP.VALORUNITARIO-IMP.VALORDESCONTO) * IMP.QUANTIDADE)+
IMP.VALORRATEIO+
IMP.VALORRATEIO_FRETE+
IMP.VALORRATEIO_SEGURO+
IMP.VALORICMSSUBSTITUIDO)
as numeric(14,2))
from MOVIMENTACAO M
join TIPOMOVIMENTACAO TP on (TP.CODIGO = M.COD_TIPOMOVIMENTACAO)
join ITEMMOVIMENTACAOPRODUTO IMP on (M.CODIGO = IMP.COD_MOVIMENTACAO and
M.TIPO = IMP.TIPOMOVIMENTACAO)
where (M.STATUS = 'F' ) and (TP.OPERACAO = 'VD')
A pergunta é: Como resolver isso
Desde já agradeço a valorosa colaboração.
Humberto S.
Mais detalhes sobre a lista de discussão lista