[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