[firebase-br] Condição IIF no WHERE

Gladiston Santana gladiston em vidy.com.br
Sex Dez 5 10:57:33 -03 2014


Não basta ser verdadeiro, tem que ter obrigatoriamente o que comparar, isso
é mandatório no firebird.
O FB não tem o tipo booleano então se eu quizesse algo como
WHERE true
teria que usar algo diferente no FB como :
WHERE (0=0)
Ou seja, sempre deve haver uma comparação.

Se quiser fazer funcionar do seu jeito tem que trazer todas as suas
sentenças para uma comparação:
WHERE (0=IIF(CAST(TIPO AS INTEGER) = 1,
  IIF(EMPRESAID < 50,0,1), IIF(EMPRESAID < 50,1,0)))

As vezes não é porque um banco de dados aceita dados de um determinado
jeito que você tem que engolir, as vezes existem jeito melhor,
multiplataforma e fáceis de dar manutenção.
No seu exemplo, um CASE/WHEN ou talvez uma CTE ficaria melhor.

Em 4 de dezembro de 2014 11:58, Marcelo Costa <marcelo em fusiontech.com.br>
escreveu:

> Gostaria de saber se haveria uma forma do firebird aceitar uma condição no
> WHERE ou no AND. No ACCESS ou no SQL Server, aceita normal. Neste exemplo
> simples abaixo, o Firebird apresenta erro.
>
> SELECT * FROM EMPRESAS
> WHERE IIF(CAST(:TIPO AS INTEGER) = 1, EMPRESAID < 50, EMPRESAID > 50)
>
> ______________________________________________
> 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
>



Mais detalhes sobre a lista de discussão lista