|
ActiveDelphi .: O site do programador Delphi! :.
|
Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
adriano_servitec Colaborador
Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Qua Jul 07, 2021 3:09 pm Assunto: |
|
|
Eu ainda não consegui entender sua ideia.
O que exatamente eu gravaria nesse campo novo? O valor que eu busquei?
Por exemplo se eu digitar %RUA%CURITIBA%
Gravar nesse campo todo o endereço que retorna rua curitiba?
Fazendo um loop e inserindo nele? as informações que vem daqui
Código: | endereco.endereco_logradouro,
endereco.endereco_complemento,
bairro.bairro_descricao bairrodescricao,
cidade.cidade_descricao as cidadedescricao,
uf.uf_sigla as ufsigla,
endereco.endereco_cep as cep |
Sinceramente ainda não entendi. _________________ Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree |
|
Voltar ao Topo |
|
|
imex Moderador
Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Qua Jul 07, 2021 3:34 pm Assunto: |
|
|
É isso. Depois que você criar o campo você pode executar um Update para gravar o endereço completo nele. |
|
Voltar ao Topo |
|
|
adriano_servitec Colaborador
Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Qua Jul 07, 2021 4:12 pm Assunto: |
|
|
imex escreveu: | É isso. Depois que você criar o campo você pode executar um Update para gravar o endereço completo nele. |
Não tem como fazer dessa forma né.
Código: | update endereco
set endereco.endereco_completo =
(
SELECT
endereco.endereco_logradouro || ' ' ||
endereco.endereco_complemento || ' ' ||
bairro.bairro_descricao || ' ' ||
cidade.cidade_descricao || ' ' ||
uf.uf_sigla || ' ' ||
endereco.endereco_cep as endereco_completo
FROM uf
INNER JOIN cidade on cidade.uf_codigo = uf.uf_codigo
INNER JOIN bairro on bairro.cidade_codigo = cidade.cidade_codigo
INNER JOIN endereco on endereco.bairro_codigo = bairro.bairro_codigo
WHERE (
UPPER(endereco.endereco_logradouro
|| cidade.cidade_descricao
|| bairro.bairro_descricao
|| uf.uf_sigla
|| uf.uf_descricao) LIKE :PBUSCA_CEP
)
) |
Pq deu erro
multiple rows in singleton select. _________________ Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree |
|
Voltar ao Topo |
|
|
imex Moderador
Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Qua Jul 07, 2021 4:38 pm Assunto: |
|
|
Não testei mas experimente dessa forma para ver se funciona:
Código: | update endereco
set endereco_completo =
upper
(
SELECT
endereco.endereco_logradouro || ' ' ||
endereco.endereco_complemento || ' ' ||
bairro.bairro_descricao || ' ' ||
cidade.cidade_descricao || ' ' ||
uf.uf_sigla || ' ' ||
endereco.endereco_cep
FROM uf
INNER JOIN cidade on cidade.cidade_codigo = endereco.cidade_codigo
INNER JOIN bairro on bairro.bairro_codigo = endereco.bairro_codigo
WHERE uf.uf_codigo = endereco.uf_codigo
) |
Espero que ajude |
|
Voltar ao Topo |
|
|
adriano_servitec Colaborador
Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Qui Jul 08, 2021 9:38 am Assunto: |
|
|
imex escreveu: | Não testei mas experimente dessa forma para ver se funciona:
Código: | update endereco
set endereco_completo =
upper
(
SELECT
endereco.endereco_logradouro || ' ' ||
endereco.endereco_complemento || ' ' ||
bairro.bairro_descricao || ' ' ||
cidade.cidade_descricao || ' ' ||
uf.uf_sigla || ' ' ||
endereco.endereco_cep
FROM uf
INNER JOIN cidade on cidade.cidade_codigo = endereco.cidade_codigo
INNER JOIN bairro on bairro.bairro_codigo = endereco.bairro_codigo
WHERE uf.uf_codigo = endereco.uf_codigo
) |
Espero que ajude | Bom dia Imex, consegui gravar na base de dados
Vamos aos resultados
Da forma concatenada pesquisando %RUA%MORRETES%
TROUXE 19 RESULTADOS
Código: | SELECT
endereco.endereco_logradouro,
endereco.endereco_complemento,
bairro.bairro_descricao bairrodescricao,
cidade.cidade_descricao as cidadedescricao,
uf.uf_sigla as ufsigla,
endereco.endereco_cep as cep
FROM uf
INNER JOIN cidade on cidade.uf_codigo = uf.uf_codigo
INNER JOIN bairro on bairro.cidade_codigo = cidade.cidade_codigo
INNER JOIN endereco on endereco.bairro_codigo = bairro.bairro_codigo
WHERE (
UPPER(endereco.endereco_logradouro
|| cidade.cidade_descricao
|| bairro.bairro_descricao
|| uf.uf_sigla
|| uf.uf_descricao) LIKE :PBUSCA_CEP
) |
Código: | Prepare time = 0ms
Execute time = 3s 719ms
Avg fetch time = 265,64 ms
Current memory = 10.095.392
Max memory = 10.847.576
Memory buffers = 2.048
Reads from disk to cache = 140.524
Writes from cache to disk = 0
Fetches from cache = 4.163.297
|
Analise da performance das tabelas
ENDERECO = 1.104.349 INDEXADO
BAIRRO = 55.449 NÃO INDEXADO
CIDADE= 55.449 INDEXADO
UF = 55.449 INDEXADO
Pesquisando %RUA%CURITIBA%
RESULTOU EM 9.903 REGISTROS
Código: | ------ Performance info ------
Prepare time = 0ms
Execute time = 625ms
Avg fetch time = 44,64 ms
Current memory = 10.100.528
Max memory = 10.847.576
Memory buffers = 2.048
Reads from disk to cache = 62.973
Writes from cache to disk = 0
Fetches from cache = 1.762.493
|
Analise da performance das tabelas
ENDERECO = 478.331 INDEXADO
BAIRRO = 21.216 NÃO INDEXADO
CIDADE= 21.216 INDEXADO
UF = 21.216 INDEXADO
Já pesquisando assim %RUA%CURITIBA%PARANÁ%
RESULTOU EM 9393 REGISTROS
Código: | ------ Performance info ------
Prepare time = 0ms
Execute time = 1s 547ms
Avg fetch time = 110,50 ms
Current memory = 10.101.856
Max memory = 10.847.576
Memory buffers = 2.048
Reads from disk to cache = 63.382
Writes from cache to disk = 0
Fetches from cache = 1.763.652 |
Analise da performance das tabelas
ENDERECO = 478.702 INDEXADO
BAIRRO = 21.219 NÃO INDEXADO
CIDADE= 21.219 INDEXADO
UF = 21.219 INDEXADO
*********************************************************************
Da forma com o campo novo
Código: | SELECT
endereco.endereco_logradouro,
endereco.endereco_complemento,
bairro.bairro_descricao bairrodescricao,
cidade.cidade_descricao as cidadedescricao,
uf.uf_sigla as ufsigla,
endereco.endereco_cep as cep
FROM uf
INNER JOIN cidade on cidade.uf_codigo = uf.uf_codigo
INNER JOIN bairro on bairro.cidade_codigo = cidade.cidade_codigo
INNER JOIN endereco on endereco.bairro_codigo = bairro.bairro_codigo
WHERE endereco.endereco_completo like :PBUSCA_CEP |
Código: | ------ Performance info ------
Prepare time = 0ms
Execute time = 2s 578ms
Avg fetch time = 184,14 ms
Current memory = 10.091.736
Max memory = 10.847.576
Memory buffers = 2.048
Reads from disk to cache = 140.524
Writes from cache to disk = 0
Fetches from cache = 4.163.297
|
Analise da performance das tabelas
ENDERECO = 1.104.349 INDEXADO
BAIRRO = 55.449 NÃO INDEXADO
CIDADE= 55.449 INDEXADO
UF = 55.449 INDEXADO
Abaixo usando o campo novo endereco_completo outros resultados obtidos
Pesquisando assim %RUA%MORRETES%CURITIBA%
DA NOVA FORMA CONSULTADO POR ENDERECO_COMPLETO
TOUXE 2 RESUTADOS
Código: | ------ Performance info ------
Prepare time = 16ms
Execute time = 2s 594ms
Avg fetch time = 1.297,00 ms
Current memory = 10.091.560
Max memory = 10.847.576
Memory buffers = 2.048
Reads from disk to cache = 140.524
Writes from cache to disk = 0
Fetches from cache = 4.163.297 |
Pesquisando %RUA%CURITIBA%
RESULTOU EM 9.903 REGISTROS um pouco a mais que a forma concatenada
Código: | ------ Performance info ------
Prepare time = 15ms
Execute time = 453ms
Avg fetch time = 32,36 ms
Current memory = 10.096.952
Max memory = 10.847.576
Memory buffers = 2.048
Reads from disk to cache = 62.956
Writes from cache to disk = 0
Fetches from cache = 1.762.460 |
Analise da performance das tabelas
ENDERECO = 478.320 INDEXADO
BAIRRO = 21.216 NÃO INDEXADO
CIDADE= 21.216 INDEXADO
UF = 21.216 INDEXADO
Já pesquisando assim %RUA%CURITIBA%PARANÁ%
RESULTOU EM 23 REGISTROS muito menos que da forma concatenada
Código: | ------ Performance info ------
Prepare time = 0ms
Execute time = 2s 610ms
Avg fetch time = 186,43 ms
Current memory = 10.091.648
Max memory = 10.847.576
Memory buffers = 2.048
Reads from disk to cache = 140.524
Writes from cache to disk = 0
Fetches from cache = 4.163.297
|
Analise da performance das tabelas
ENDERECO = 1.104.349 INDEXADO
BAIRRO =55.449 NÃO INDEXADO
CIDADE= 55.449 INDEXADO
UF = 55.449 INDEXADO
Parece que quanto mais registros menos tempo leva para trazer o retorno. Isso também percebi do modo concatenado que quanto mais registros menos tempo de resposta.
Melhorou um pouco nesse segundo, não como imaginava mais já deu uma pequena diferença.
Não sei se da pra melhorar mais ainda isso.
Pois não sei como o Correios faz pq é instantâneo a consulta deles _________________ Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree |
|
Voltar ao Topo |
|
|
imex Moderador
Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Qui Jul 08, 2021 10:32 am Assunto: |
|
|
Experimente fazer uns testes deixando a tabela Endereco depois do From assim como estava no início do tópico já que o campo do filtro é dessa tabela:
Código: | SELECT
endereco.endereco_logradouro,
endereco.endereco_complemento,
bairro.bairro_descricao bairrodescricao,
cidade.cidade_descricao as cidadedescricao,
uf.uf_sigla as ufsigla,
endereco.endereco_cep as cep
FROM endereco
INNER JOIN cidade on cidade.cidade_codigo = endereco.cidade_codigo
INNER JOIN bairro on bairro.bairro_codigo = endereco.bairro_codigo
INNER JOIN uf on uf.uf_codigo = endereco.uf_codigo
WHERE endereco.endereco_completo like :PBUSCA_CEP |
Espero que ajude |
|
Voltar ao Topo |
|
|
adriano_servitec Colaborador
Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Qui Jul 08, 2021 11:18 am Assunto: |
|
|
imex escreveu: | Experimente fazer uns testes deixando a tabela Endereco depois do From assim como estava no início do tópico já que o campo do filtro é dessa tabela:
Código: | SELECT
endereco.endereco_logradouro,
endereco.endereco_complemento,
bairro.bairro_descricao bairrodescricao,
cidade.cidade_descricao as cidadedescricao,
uf.uf_sigla as ufsigla,
endereco.endereco_cep as cep
FROM endereco
INNER JOIN cidade on cidade.cidade_codigo = endereco.cidade_codigo
INNER JOIN bairro on bairro.bairro_codigo = endereco.bairro_codigo
INNER JOIN uf on uf.uf_codigo = endereco.uf_codigo
WHERE endereco.endereco_completo like :PBUSCA_CEP |
Espero que ajude | Assim ficou um pouco mais rápido
Acho que mais que isso não da mesmo né.
Aproveitando tem uma forma direta para substituir um endereço que veio assim
RUA DE DUQUE
para
RUA DUQUE DE
Assim parce não funcionar
Código: | update ENDERECO set
endereco.endereco_logradouro = replace(endereco.endereco_logradouro, '%RUA%DE%DUQUE%', '%RUA%DUQUE%DE%'); |
_________________ Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree |
|
Voltar ao Topo |
|
|
imex Moderador
Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Qui Jul 08, 2021 11:54 am Assunto: |
|
|
Segue uma outra sugestão de testes para a consulta:
Código: | with CTE_Filtro as
(
SELECT
endereco_logradouro,
endereco_complemento,
bairro_codigo,
cidade_codigo,
uf_codigo,
endereco_cep
FROM endereco
WHERE endereco_completo like :PBUSCA_CEP
)
SELECT
CTE_Filtro.endereco_logradouro,
CTE_Filtro.endereco_complemento,
bairro.bairro_descricao bairrodescricao,
cidade.cidade_descricao as cidadedescricao,
uf.uf_sigla as ufsigla,
CTE_Filtro.endereco_cep as cep
FROM CTE_Filtro
INNER JOIN cidade on cidade.cidade_codigo = CTE_Filtro.cidade_codigo
INNER JOIN bairro on bairro.bairro_codigo = CTE_Filtro.bairro_codigo
INNER JOIN uf on uf.uf_codigo = CTE_Filtro.uf_codigo |
Para o Update, experimente dessa forma:
Código: | update ENDERECO set
endereco_logradouro = replace(endereco_logradouro, 'RUA DE DUQUE', 'RUA DUQUE DE');
where
endereco_logradouro like '%RUA%DE%DUQUE%' |
Espero que ajude |
|
Voltar ao Topo |
|
|
adriano_servitec Colaborador
Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Qui Jul 08, 2021 12:16 pm Assunto: |
|
|
imex escreveu: | Segue uma outra sugestão de testes para a consulta:
Código: | with CTE_Filtro as
(
SELECT
endereco_logradouro,
endereco_complemento,
bairro_codigo,
cidade_codigo,
uf_codigo,
endereco_cep
FROM endereco
WHERE endereco_completo like :PBUSCA_CEP
)
SELECT
CTE_Filtro.endereco_logradouro,
CTE_Filtro.endereco_complemento,
bairro.bairro_descricao bairrodescricao,
cidade.cidade_descricao as cidadedescricao,
uf.uf_sigla as ufsigla,
CTE_Filtro.endereco_cep as cep
FROM CTE_Filtro
INNER JOIN cidade on cidade.cidade_codigo = CTE_Filtro.cidade_codigo
INNER JOIN bairro on bairro.bairro_codigo = CTE_Filtro.bairro_codigo
INNER JOIN uf on uf.uf_codigo = CTE_Filtro.uf_codigo |
Para o Update, experimente dessa forma:
Código: | update ENDERECO set
endereco_logradouro = replace(endereco_logradouro, 'RUA DE DUQUE', 'RUA DUQUE DE');
where
endereco_logradouro like '%RUA%DE%DUQUE%' |
Espero que ajude | O select ficou indiferente praticamente do anterior Imex.
O Update deu certo. _________________ Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree |
|
Voltar ao Topo |
|
|
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|