[firebase-br] Arihimetic Overflow - somente para um registro

Eduardo Pelizzari de Andrade eduardoandrade em persoft.com.br
Qui Abr 9 09:30:50 -03 2009


O que deve estar acontecendo é o seguinte: Exite um registro com 
pedidosven.valorpedido zerado ou nulo mas que não atenda a condição:

pedidosven.status not in ('Transf.', 'Cancelado') and
         pedidosven.mesprimeiroacerto = '03/01/2009' and
         *pedidosven.representante = 1 and*
         pedidosven.tipo = 'R' and


Agora imagina que isso seja verdade, existe um registro zerado ou nulo, 
mas que não atenda a condição acima. Se o firebird estiver iniciando o 
teste do where pelo cálculo ((pedidosven.vendidoestoq * 100) / 
pedidosven.valorpedido) < 1, ou pelo menos, se o firebird estiver 
testando o cálculo antes de testar a condição que este registro não 
atenda e quer irá filtrá-lo o erro acontece.

Esta hipótese explicaria também porque quando você coloca o cálculo no 
select ele funciona, porque se o cálculo estiver no select,  registro 
problemático já foi filtrado.

Neste caso a solução apontada pelo nosso colega Kelver Merlot, que está 
descrita abaixo, resolveria.

Eduardo Pelizzari de Andrade
Persoft Softwares Aplicativos




Kelver Merlotti escreveu:
> se for realmente problema de 0 ou nulo, acho que isso aqui resolve:
>
> ... and
> ( (pedidosven.vendidoestoq * 100) /
>
> case coalesce(pedidosven.valorpedido, 1) when 0 then
> 1 else coalesce(pedidosven.valorpedido, 1) end
>
> ) < 1
>
> abraço!
>
> 2009/4/9 Felipe Aron <felipearon em gmail.com>:
>   
>> Não retorna nenhum registro. Se eu fazer o calculo no select e não no where
>> ele funciona...
>>
>> 2009/4/8 Eduardo Pelizzari de Andrade <eduardoandrade em persoft.com.br>
>>
>>     
>>> Algum registro tem que estar com pedidosven.valorpedido zerado ou nulo. se
>>> êstá vindo zerado. Rode a query abaixo e de uma olhada.
>>>
>>> select *
>>>     from pedidosven
>>>    where pedidosven.status not in ('Transf.', 'Cancelado') and
>>>          pedidosven.mesprimeiroacerto = '03/01/2009' and
>>>          *pedidosven.representante = :NIREP and*
>>>          pedidosven.tipo = 'R' and
>>>          coalesce(pedidosven.valorpedido,0)=0
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> Eduardo Pelizzari de Andrade
>>> Persoft Softwares Aplicativos
>>>
>>>
>>>
>>>
>>> Felipe Aron escreveu:
>>>
>>>       
>>>> Então, se eu colocar dividido por um valor qualquer digitado (Ex: 10, 100,
>>>> 50...) ele funciona....
>>>>
>>>> 2009/4/8 Eduardo Pelizzari de Andrade <eduardoandrade em persoft.com.br>
>>>>
>>>>
>>>>
>>>>         
>>>>> Sei que você disse que todos os valores são maiores que zero, mas tente
>>>>> rodar a query se a divisão dos pedidosven.valorpedido;
>>>>>
>>>>>
>>>>> Eduardo Pelizzari de Andrade
>>>>> Persoft Softwares Aplicativos
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> Felipe Aron escreveu:
>>>>>
>>>>>
>>>>>
>>>>>           
>>>>>> Pessoal estou com um dilema aqui que até agora não consegui entender.
>>>>>> Seguinte tenho essa SQL:
>>>>>>
>>>>>>    select count(*)
>>>>>>      from pedidosven
>>>>>>     where pedidosven.status not in ('Transf.', 'Cancelado') and
>>>>>>           pedidosven.mesprimeiroacerto = '03/01/2009' and
>>>>>>           *pedidosven.representante = :NIREP and*
>>>>>>           pedidosven.tipo = 'R' and
>>>>>>           *((pedidosven.vendidoestoq * 100) / pedidosven.valorpedido) <
>>>>>> 1
>>>>>> *
>>>>>> Isso está funcionando em vários lugares... mas numa base em questão,
>>>>>> quando
>>>>>> informo o parametro :NIREP = 1 ele tá erro de Arithimetic Overflow ...
>>>>>> Para
>>>>>> qualquer outro registro funciona.
>>>>>>
>>>>>> OBS: Todos os campos possuem valores maiores que zero !!
>>>>>> O que pode ser ??
>>>>>>
>>>>>>
>>>>>>  ------------------------------------------------------------------------
>>>>>>
>>>>>>
>>>>>> No virus found in this incoming message.
>>>>>> Checked by AVG - www.avg.com Version: 8.0.238 / Virus Database:
>>>>>> 270.11.45/2045 - Release Date: 04/07/09 06:41:00
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>             
>>>>> ______________________________________________
>>>>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>>>>> Para saber como gerenciar/excluir seu cadastro na lista, use:
>>>>> http://www.firebase.com.br/fb/artigo.php?id=1107
>>>>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>>>>
>>>>>
>>>>>
>>>>>           
>>>>
>>>>  ------------------------------------------------------------------------
>>>>
>>>>
>>>> No virus found in this incoming message.
>>>> Checked by AVG - www.avg.com Version: 8.0.238 / Virus Database:
>>>> 270.11.45/2045 - Release Date: 04/07/09 06:41:00
>>>>
>>>>
>>>>
>>>>         
>>> ______________________________________________
>>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>>> Para saber como gerenciar/excluir seu cadastro na lista, use:
>>> http://www.firebase.com.br/fb/artigo.php?id=1107
>>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>>
>>>       
>>
>> --
>> Com a força aprenda a suavidade. Através da suavidade a força prevalecerá!
>>
>> http://www.felipearon.com.br/okane --> Controle Financeiro Pessoal (Sistema
>> Gratuito - Em Desenvolvimento...)
>> http://br.groups.yahoo.com/group/xna-br/ --> Grupo de Discussão
>> http://pogsjob.wordpress.com (Pogs de programadores)
>> ______________________________________________
>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>> Para saber como gerenciar/excluir seu cadastro na lista, use: http://www.firebase.com.br/fb/artigo.php?id=1107
>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>
>>     
>
>
>
>   
> ------------------------------------------------------------------------
>
>
> No virus found in this incoming message.
> Checked by AVG - www.avg.com 
> Version: 8.0.238 / Virus Database: 270.11.47/2047 - Release Date: 04/08/09 05:53:00
>
>   




Mais detalhes sobre a lista de discussão lista