[firebase-br] Parâmetros nulos

"Fabrício F. Kammer" ffkammer em conchalnet.com.br
Sáb Jul 22 12:51:11 -03 2006


Eita nóis! Excelente solução Paulo...

funcionou perfeitamente bem e ainda utilizou os planos de otimização...

vlw... essa é a solução.

[]s


Paulo Geloramo escreveu:
> Faz o teste desta forma:
> 
> SELECT *
> FROM CLIENTE
> WHERE  NOME = COALESCE(:PNOME, NOME)
> 
> []s
> Paulo Geloramo
> 
> -----Mensagem Original----- 
> De: ""Fabrício F. Kammer"" <ffkammer em conchalnet.com.br>
> Para: "FireBase" <lista em firebase.com.br>
> Enviada em: quinta-feira, 20 de julho de 2006 17:49
> Assunto: Re: [firebase-br] Parâmetros nulos
> 
> 
> O problema não é o trabalho... até tenho isso pronto em meu sistema...
> mas é que o sistema não saberá qual é a instrução sql e nem os
> parâmetros, isso tudo estará dentro do report...
> 
> Mas tudo bem estou fazendo testes com as opção e estarei implementando a
> que melhor se adequar...
> 
> []s
> 
> dvdmengarda em hotmail.com escreveu:
>> Fiz alguns testes com o uso das duas formas mencionadas (coalesce e 'or') e
>> em ambas o plano escolhido foi o natural. Tentei forçar o plano com a chave
>> primária, porém o mesmo foi recusado. Dependendo da quantidade de registros
>> que se irá pesquisar ou retornar, o ganho que se tem na otimização da
>> instrução SQL resulta na perda da performance.
>> Tenho uma tabela de duplicatas com cerca de 400.000 registros e quando
>> executo uma query que retorne apenas alguns registros e é utilizada a ordem
>> natural, a demora é significativa. Nos casos como o mencionado o ideal seria
>> montar a query de acordo com o necessidade do filtro, ou seja, se um
>> determinado campo não será filtrado porque seu parâmetro é nulo, melhor não
>> incluí-lo da query. Dá um pouco mais de trabalho, mas vale a esforço.
>>
>>
>>> SELECT
>>>  [CAMPOS]
>>> FROM
>>>  [TABLEAS]
>>> WHERE
>>>  (:PARAM IS NULL
>>>    OR
>>>     CAMPO = :PARAM)
>>>
>>> SELECT
>>>  [CAMPOS]
>>> FROM
>>>  [TABLEAS]
>>> WHERE
>>>  CAMPO = COALESCE(:PARAM, CAMPO)
>>>
>> ----- Original Message ----- 
>> From: "Fabiano Arndt" <fabianoallex em gmail.com>
>> To: "FireBase" <lista em firebase.com.br>
>> Sent: Thursday, July 20, 2006 4:43 PM
>> Subject: Re: [firebase-br] Parâmetros nulos
>>
>>
>> Olá Kléber,
>>
>> faz tempinho já que tentei fazer da mesma forma que no Oracle usando
>> os componetes IBQuery no Delphi e não funcionava direito muito bem
>> não, não lembro exatamente o que acontecia, aí criei esse segundo
>> parâmetro e ficou blz.
>>
>> pra tirar a dúvida (e lembrar o que acontecia), assim que eu conseguir
>> vou fazer o teste novamente.
>>
>> flw,
>> Fabiano.
>>
>> Em 20/07/06, Kléber Caneva<kdcc em terra.com.br> escreveu:
>>> Não sei pq teve que criar esse segundo parametro..
>>>
>>> Veja nas mensagens de ontem, eu passei um exemplo onde usso exatamente
>>> como
>>> no seu exemplo do Oracle.
>>>
>>> []´s
>>>
>>> Kléber Caneva
>>>
>>> ----- Original Message -----
>>> From: "Fabiano Arndt" <fabianoallex em gmail.com>
>>> To: "FireBase" <lista em firebase.com.br>
>>> Sent: Wednesday, July 19, 2006 5:57 PM
>>> Subject: Re: [firebase-br] Parâmetros nulos
>>>
>>>
>>> Precisei disso tbm, em Oracle é facinho, normalmente nossos select de
>>> relatórios e consultas tem esse formato no Oracle:
>>>
>>> SELECT
>>>  [CAMPOS]
>>> FROM
>>>  [TABLEAS]
>>> WHERE
>>>  (:PARAM IS NULL
>>>    OR
>>>     CAMPO = :PARAM)
>>>  AND
>>>  (:PARAM2 IS NULL
>>>    OR
>>>     CAMPO = :PARAM2)
>>>
>>>
>>> no firebird tive que criar 2 parametros para cada opção, ficou mais ou
>>> menos assim
>>>
>>> SELECT
>>>  [CAMPOS]
>>> FROM
>>>  [TABLEAS]
>>> WHERE
>>>  (:POR_PARAM = -1
>>>    OR
>>>     CAMPO = :PARAM)
>>>  AND
>>>  (:POR_PARAM_2 = -1
>>>    OR
>>>     CAMPO = :PARAM2)
>>>
>>> aí se o usuário deseja pelo primeiro parametro, passo 0 para POR_PARAM
>>> e o valor do parametro se ele deseja não filtrar pelo parametro, passo
>>> -1 para POR_PARAM
>>>
>>> espero que nao tenha ficado confusso
>>>
>>>
>>> flw,
>>> Fabiano.
>>>
>>>
>>> Em 18/07/06, "Fabrício F. Kammer"<ffkammer em conchalnet.com.br> escreveu:
>>>> Salve Galera!
>>>>
>>>> Alguém sabe alguma forma eficiente para testar se um parâmetro é nulo?
>>>> Tenho muitas consultas com parâmetros opcionais e preciso que o select
>>>> traga todos os registros caso o parâmetro não sejam informados.
>>>>
>>>> Em Oracle isso é o possível:
>>>>
>>>> WHERE CAMPO=:PARAM OR :PARAM IS NULL
>>>>
>>>> Já no FB não é possível esta solução. Testei o seguinte:
>>>>
>>>> WHERE CAMPO=:PARAM OR 0=:PARAM
>>>>
>>>> Porém dessa forma eu terei que passar um 0 (zero) na momento da execução
>>>> da consulta, caso isso seja esquecido a consulta não retornará nenhum
>>>> registro.
>>>>
>>>> []s
>>>>
>>>> --
>>>> Fabrício F. Kammer
>>>> Conchal/SP
>>>>
>>>> ______________________________________________
>>>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>>>> Para editar sua configuração na lista, use o endereço
>>>> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
>>>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>>>
>>> ______________________________________________
>>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>>> Para editar sua configuração na lista, use o endereço
>>> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
>>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>>
>>> E-mail classificado pelo Identificador de Spam Inteligente Terra.
>>> Para alterar a categoria classificada, visite
>>> http://mail.terra.com.br/protected_email/imail/imail.cgi?+_u=kdcc&_l=1,1153342753.411977.18494.aldavila.hst.terra.com.br,5303,Des15,Des15
>>>
>>> Esta mensagem foi verificada pelo E-mail Protegido Terra.
>>> Scan engine: McAfee VirusScan / Atualizado em 19/07/2006 / Versão:
>>> 4.4.00/4810
>>> Proteja o seu e-mail Terra: http://mail.terra.com.br/
>>>
>>>
>>>
>>>
>>>
>>> ______________________________________________
>>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>>> Para editar sua configuração na lista, use o endereço
>>> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
>>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>>
>> ______________________________________________
>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>> Para editar sua configuração na lista, use o endereço
>> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>
>> ______________________________________________
>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>> Para editar sua configuração na lista, use o endereço http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> 
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para editar sua configuração na lista, use o endereço http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> 
> 
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para editar sua configuração na lista, use o endereço http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa




Mais detalhes sobre a lista de discussão lista