Re: [firebase-br] Parâmetros nulos

Paulo Geloramo paulogeloramo em terra.com.br
Sex Jul 21 13:44:50 -03 2006


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





Mais detalhes sobre a lista de discussão lista