[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