[firebase-br] Condição IF dentro da cláusula WHERE?

Carlos - GMail krlosgilson em gmail.com
Qua Jan 26 16:51:26 -03 2011


Boa tarde a todos! A algum tempo já trabalho com o firebird, atualmente 
com a versão 2.0. No meu sistema para escola eu utilizo algumas SP's 
para usar em relatórios. Em algumas situações eu preciso mandar como 
parâmetro o código da filial para filtrar por loja, e em outras não 
quando o usuário seleciona a opção "Todas as Filiais". Então to fazendo 
um Select para cada condição porque nunca encontrei artigo nenhum que 
mostre como usar uma condição do tipo IF ou CASE dentro do Where. Ai vai 
um exemplo abaixo:

Parâmetros de Entrada:

pIdEmpresa Integer;
pDataInicial Date;
pDataFinal Date;

if (pIdEmpresa = 0) then --Se foi selecionado para mostrar de todas as 
filiais
begin
   for select
   t.data,
   t.id_servico,
   t.servico,
   t.id_aluno||' - '||(select f.nome from fichas f where f.id = 
t.id_aluno) as aluno,
   t.caixa,
   t.valor
   from fichas_taxas t
   where (t.data between :pdatainicial and :pdatafinal)
   into
   :data,
   :id_servico,
   :servico,
   :aluno,
   :caixa,
   :valor
   do begin
     suspend;
   end
end else --Se foi selecionado o código da Filial
begin
   for select
   t.data,
   t.id_servico,
   t.servico,
   t.id_aluno||' - '||(select f.nome from fichas f where f.id = 
t.id_aluno) as aluno,
   t.caixa,
   t.valor
   from fichas_taxas t
   where (t.data between :pdatainicial and :pdatafinal) and 
(t.id_empresa =:pIdEmpresa)
   into
   :data,
   :id_servico,
   :servico,
   :aluno,
   :caixa,
   :valor
   do begin
     suspend;
   end
end
************
Então eu não to concordando mto por usar um select pra cada condição pq 
fica mto mais trabalhoso qndo acontece de fazer alguma alteração sem 
falar que o código fica enorme, eu creio que já inventaram alguma forma 
de contornar isso. :)




Mais detalhes sobre a lista de discussão lista