[firebase-br] Erro - Positive Numeric value required - AGORA COM SELECT COMPLETO

eduardo eduardo em icontroller.com.br
Seg Jul 25 16:09:57 -03 2005


Oi Jean

>     Como são vários select's que apresentam esse problema, segue um deles pra demonstração.
>     Ah...detalhe...às vezes o problema não ocorre.
Com a mesma querie? Você diz intermitente?
Vi em seus posts anteriores que vc já fez backup/restore.
A fbclient da estação é a mesma versão do servidor?
Em uma mesma estação acontece esta intermitência, ou ocorre em uma 
estação e em outra não?

>     Segue:
> 
> 
> SELECT COUNT(*) AS NR, A.*, B.NOME,C.DESCRICAO, D.VLPAGO, D.DTMOVIMENTO     
> FROM RELCRITICA A 
>   INNER JOIN BANCO B ON(A.BANCO = B.BANCO

Aqui falta um parentese. (A.BANCO = B.BANCO) - mas isto resultaria outro 
erro e não o que você relata.

>   INNER JOIN CRITICA C ON (A.CODCRITICA = C.CODCRITICA) 
>   INNER JOIN BXLOTE D ON (A.BANCO = D.BANCO AND A.LOTE = D.LOTE AND A.SEQUENCIA = D.SEQUENCIA) 
> WHERE A.DATA BETWEEN :DATA1 AND :DATA2 
> GROUP BY A.BANCO, A.LOTE, A.SEQUENCIA, A.DOCUMENTO, A.CODCRITICA, 
>              A.DATA, B.NOME, C.DESCRICAO, D.VLPAGO, D.DTMOVIMENTO 

Não sabia que se podia colocar A.* e se mandar agrupar pelos campos de 
A.*. Eu colocaria

SELECT COUNT(*) AS NR, A.BANCO, A.LOTE, A.SEQUENCIA, A.DOCUMENTO, 
A.CODCRITICA,  A.DATA, ...

>  ORDER BY A.LOTE,C.CODCRITICA,A.BANCO, A.SEQUENCIA, A.DATA
C.CODCRITICA não está no Result Set. Como há um join em 
A.CODCRITICA=C.CODCRITICA, seria melhor ordenar por A.CODCRITICA para 
facilitar o serviço do banco. Melhor ainda, em resultados agregados, 
seria melhor o ORDER BY 1,2,3,4...

Outra questão com agregados e ORDER BY é que se você montar o SELECT na 
ordem que você está agrupando, não precisa ordenar.

Nunca obtive o erro "Positive Numeric Value Required", mas, pelo texto, 
verificaria se os campos de JOIN são do mesmo tipo, ou em uma tabela é 
INTEGER e em outra CHAR, por exemplo.

Como uma crítica construtiva, procure evitar o .*
Isto dá mais trabalho para o Banco e tudo que pudermos fazer para ele 
trabalhar menos resulta em ganho de performance.

[]s Eduardo





Mais detalhes sobre a lista de discussão lista