[firebase-br] Deveria retornar NULL mas não

Carlos H. Cantu listas em warmboot.com.br
Ter Jan 22 09:18:34 -03 2013


Segundo o Vlad Khorsun, a variável não é modificada quando o select
retorna um resultset vazio. No exemplo, quando você usa o group by,
não há grupos para serem agrupados, portanto o resultset fica vazio e
a variável não é modificada.

Ex:

select sum() from <empty>

sempre retorna um resultset com 1 linha (com todos os campos nulos).
Isso é definido no SQL standard.

enquanto:

select sum() from <empty> group by ...

retorna um resultset vazio, porque não há grupos.


[]s
Carlos H. Cantu
www.FireBase.com.br - www.firebirdnews.org
www.warmboot.com.br - blog.firebase.com.br

MR> Boa Noite,
MR>  
MR> Com efeito. Estou usando o "Group By", mas agora V/me deixou mais
MR> preocupado porque, salvo melhor opinião, esta situação acaba
MR> revelando alguma incoerência. Talvez se trate de um bug pois não
MR> faz sentido que no "group by" retorne nulos s/ ele não, a menos
MR> que haja uma justificação que não estou  a vislumbrar. 
MR> De qualquer forma muito obrigado.
MR> Cumprimentos
MR> Mário Reis


MR>  
MR> No dia 21 de Janeiro de 2013 à25 15:59, Carlos H. Cantu
MR> <listas em warmboot.com.br>escreveu:
MR>  
MR> Pelos testes que fiz, a variável realmente não seria afetada se vc
MR>   estiver usando "group by" no select, caso contrário, ela deveria ficar null.
MR>  
MR>  Ou então tem alguma outra situação que não ficou explicitada no exemplo
MR>  do seu email.
MR>  

MR>  []s
MR>  Carlos H. Cantu
MR>  www.FireBase.com.br - www.firebirdnews.org
MR>  www.warmboot.com.br - blog.firebase.com.br
MR>  
MR>  
MR>> Boas tardes,
 MR>>
 MR>> Desculpem todos,  mas talvez não me haja explicado da melhor
 MR>> forma, pelo que, em primeiro lugar gostaria de voltar a frisar que
 MR>> estou num ciclo lendo um cursor. O problema tem a ver com o facto
 MR>> de, estando o ficheiro TMP vazio, as variáveis para as quais
 MR>> carrego Sum(Valor) ou Sum(COALESCE(Valor,0)  "Into :WValor" não
 MR>> serem reafectadas, ou seja, manterem o último valor carregado numa
 MR>> leitura com registos no TMP, daí que, tanto faz usar a função COALESCE como não.
 MR>>
 MR>> Na chamada ao comando Selct Sum(...) Into :WValor, esta variável
 MR>> que vinha com 20 como total da última soma não se altera,
 MR>> mantem-se com 20 apesar de não haver qualquer registo para somar,
 MR>> mas se a variável for do tipo Char(1) e estiver carregada com "E" da leitura do ciclo anterior,
 MR>> mantem o "E" em vez de retornar brancos ou nulo.
 MR>>
 MR>> Não sei, mas arrisco. Parece que no comando do Select - à entrada
 MR>> - se analisa se o ficheiro está vazio, e em caso afirmativo,
 MR>> sai-se logo sem sequer reinicializar as variaveis, porque,  de
 MR>> contrário, havendo pelo menos um registo, as variáveis são
 MR>> reafectadas e tudo funciona de acordo com a lógica.
 MR>>
 MR>> De onde se conclui pela obrigatoriedade de, dentro de um ciclo,
 MR>> ser obrigatório reinicializar sempre as variaveis de carregamento em tais circunstâncias.
 MR>>
 MR>> Mário Reis
MR>  

MR>  
MR>  ______________________________________________
MR>  FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
MR>  Para saber como gerenciar/excluir seu cadastro na lista, use:
MR> http://www.firebase.com.br/fb/artigo.php?id=1107
MR>  Para consultar mensagens antigas: http://firebase.com.br/pesquisa
MR>  










Mais detalhes sobre a lista de discussão lista