Fórum cláusula Where com parâmetros #56556
18/07/2006
0
select cod_cliente from clientes where (NOME_RAZAO = :Nome_Razao) and (NOME_FANTASIA = :Nome_Fantasia)
ou seja, se os dois parâmetros forem fornecidos é para procurar a combinação dos dois. Mas caso apenas um seja informado, é para procurar apenas os registros igual ao parâmetro informado e o outro campo seja igual a nulo.
[/code]
Raserafim
Curtir tópico
+ 0Posts
18/07/2006
Cabelo
troque o and por or...
acredito que resolva o problema...
Gostei + 0
19/07/2006
Rodolpho123
Essa qry não dá para ser montada em Run-Time? Se vc utlizar a cláusula [b:15a2232a17]or[/b:15a2232a17], o plano de execução da qry [b:15a2232a17]não[/b:15a2232a17] vai utlizar nenhum índice.
Gostei + 0
19/07/2006
Cabelo
Bom... primeiro que ´or´ não é uma cláusula... e sim um operador lógico...
segundo... PQ não vai utilizar um índice...???????????
não entendí... isso depende de como vc criar sua tabela...
se vc defineir o ídice como um doas campos, e depois outro índice com o outo campo irá funcionar perfeitamente.. 8)
Não vejo problemas...
Não entendí sua dúvida... entãos empre que usar o operador or não terei índice?????
Gostei + 0
20/07/2006
Raserafim
tenho um cadastro de clientes em que o nome que identifica o cliente é o composto da Razão Social juntamente com o Nome Fantasia. Ou seja, a concatenação dos dois campos é a identificação do cliente e portanto não podem se repetir.
ex: se em um registro estiver preenchido apenas a Razão Social, a pesquisa deverá localizar os registros que tb tem apenas a Razão Social preenchida e com o mesmo valor. os registros que tem a mesma Razão Social, mas que tb tem um nome fantasia não devem aparecer no resultado da busca.
Gostei + 0
20/07/2006
Cabelo
select cod_cliente from clientes where (NOME_RAZAO || NOME_FANTASIA) = (:Nome_Razao || :Nome_Fantasia)
Concatenando os dois campos, e os dois parâmetros
Gostei + 0
20/07/2006
Rodolpho123
Bom... primeiro que ´or´ não é uma cláusula... e sim um operador lógico...
-Valeu pela correção...me enganei
segundo... PQ não vai utilizar um índice...???????????
- Prq o interpretador não tem uma coluna definida para a busca, pois ele não vai pesquisar em um índice e depois ao outro, por isso, o [b:a30615d094]full-scan[/b:a30615d094] é inevitável
não entendí... isso depende de como vc criar sua tabela...
- Também concordo...acho que nesta estrutura, fica um pouco difícil fazer este tipo de pesquisa
se vc defineir o ídice como um doas campos, e depois outro índice com o outo campo irá funcionar perfeitamente.. 8)
-Mesmo definindo os índices em ambos os campos, utilizando o [b:a30615d094]or[/b:a30615d094], não vai pesquisar por nenhum índice. Lembrando que também não é aconselhavel criar vários índices, pois a perfórmance do BD cai....
[/quote:a30615d094]
Gostei + 0
20/07/2006
Cabelo
concordo com vc... eu iria sugerir fazer um select concatenado os campos, exatamente como na resposta anterior... pq aí sim o índice funcionaria, sendo que.. ele deve ser criado com os dois campos da pesquisa...
um abraço..
Gostei + 0
21/07/2006
Rodolpho123
Aí assim, deste jeito, vai rolar ´redondinho´.....
Gostei + 0
02/08/2006
Raserafim
Gostei + 0
02/08/2006
Raserafim
o problema da concatenação resolvi com o comando coalesce.
e tive também que alterar o seu código. foi preciso colocar um traço entre os campos.
o código ficou assim:
select nome_razao, nome_fantasia, (coalesce(nome_razao,´´) || ´ - ´ || coalesce(nome_fantasia,´´)) from clientes where (coalesce(nome_razao,´´) || ´ - ´ || coalesce(nome_fantasia,´´)) like (:razao || ´ - ´ || :fantasia )
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)