cláusula Where com parâmetros
preciso fazer a seguinte consulta:
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]
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
Curtidas 0
Respostas
Cabelo
18/07/2006
Colega...
troque o and por or...
acredito que resolva o problema...
troque o and por or...
acredito que resolva o problema...
GOSTEI 0
Rodolpho123
18/07/2006
Cara,
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.
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
Cabelo
18/07/2006
Cara,
Essa qry não dá para ser montada em Run-Time? Se vc utlizar a cláusula [b:838694794b]or[/b:838694794b], o plano de execução da qry [b:838694794b]não[/b:838694794b] vai utlizar nenhum índice.
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
Raserafim
18/07/2006
substituir o [b:9e34336c85]and[/b:9e34336c85] por [b:9e34336c85]or[/b:9e34336c85] não serve para a situação pelo seguinte motivo.
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.
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
Cabelo
18/07/2006
Se eu enendí bem... então o código abaixo deve resolver seu problema
Concatenando os dois campos, e os dois parâmetros
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
Rodolpho123
18/07/2006
[quote:a30615d094=´Rodolpho123´]Cara,
Essa qry não dá para ser montada em Run-Time? Se vc utlizar a cláusula [b:a30615d094]or[/b:a30615d094], o plano de execução da qry [b:a30615d094]não[/b:a30615d094] vai utlizar nenhum índice.
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
Cabelo
18/07/2006
Rodolpho123
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..
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
Rodolpho123
18/07/2006
Rodolpho123
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..
Aí assim, deste jeito, vai rolar ´redondinho´.....
GOSTEI 0
Raserafim
18/07/2006
cabelo, com o seu código aconteceu o seguinte problema: na cláusula where caso um dos dois campos seja nulo então ele não concatena e despreza o registro. ou seja, só está sendo mostrado os registro que tem os dois campos preenchidos
GOSTEI 0
Raserafim
18/07/2006
consegui resolver.
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:
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