[RESOLVIDO] Update diferente  XML
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Autor Mensagem
RenataFA
Virtual Machine Man
[Avatar]

Membro desde: 24/08/2006 08:15:10
Mensagens: 698
Offline

Olá pessoal!

Preciso de uma ajuda pra montar uma instrução update meio diferente.

Tenho uma tabela em que tem vários campos, entre eles: loja, quantidade, valor, rankingqtd e rankingvalor.
Todos os campos estão preenchidos, exceto rankingqtd e rankintvalor.

Preciso de um update justamente pra preenchê-los.

Eu atualmente preencho esses campos via codificação java, mas está lento demais e preciso de uma instrução update que faça isso pra mim, bem mais rápido. Pra entenderem como preencho, em java faço da seguinte forma:

- seleciono os dados ordenados por loja (crescente) e quantidade (decrescente)
- percorro preenchendo o campo rankingqtd a partir de 1 (incrementando 1 a cada registro)
- qdo muda a loja, eu recomeco a numeração a partir do 1

Feito isso pra quantidade eu faço a mesma coisa pra preencher o ranking de valor.

Isso é muito lento!

Por favor, alguém me ajuda a montar um update pra fazer isso? Não tem problema se eu tiver que fazer um pra cada loja... se não tiver jeito eu faço uma loja de cada vez.

Eu preciso no momento pra MySQL, depois terei que fazer pra SQLServer e Oracle tb, mas por hora se eu conseguir fazer em MySQL depois eu traduzo pros outros BDs.

É algo urgente, agradeço qq ajuda!!!

Grata,
Renata

This message was edited 1 time. Last update was at 29/09/2009 08:21:02


[]'s, Renata
[Email]
Andre Brito
JWizard

Membro desde: 21/07/2007 17:44:31
Mensagens: 2485
Localização: Paraná
Offline

Renata,
Você pode usar HQL ou deve se SQL 'puro'? Eu não sei como resolver isso ainda, mas vamos discutir o que você pode tentar fazer.
Outra pergunta, nessa 'passada' que você faz pelos registros, o valor de rankingqtd e rankingvalor são iguais para todos (digamos, rankingqtd e rankingvalor são diferentes entre si, mas são iguais entre os registros)?

Como organizar o GUJ.
Meu Twitter.
Meu blog.
Future proofing means making code easy to change, not trying to anticipate every possible way your code might need to change.
[WWW]
RenataFA
Virtual Machine Man
[Avatar]

Membro desde: 24/08/2006 08:15:10
Mensagens: 698
Offline

Andre Brito wrote:Renata,
Você pode usar HQL ou deve se SQL 'puro'? Eu não sei como resolver isso ainda, mas vamos discutir o que você pode tentar fazer.
Outra pergunta, nessa 'passada' que você faz pelos registros, o valor de rankingqtd e rankingvalor são iguais para todos (digamos, rankingqtd e rankingvalor são diferentes entre si, mas são iguais entre os registros)?


Só SQL (como eu falei, pros 3 bancos: mysql, oracle e sqlserver)

rankingqtd e rankingvalor são sempre diferentes, entre si e entre os registros.

[]'s, Renata
[Email]
emmanuelrock
Java Ninja
[Avatar]

Membro desde: 07/05/2009 00:38:41
Mensagens: 291
Localização: Curitiba - PR
Offline

Não seria o caso de você usar update com o select na cláusula where?

"Quem sabe que é profundo busca a clareza. Quem deseja parecer profundo para a multidão procura ser obscuro porque a multidão toma por profundo aquilo cujo o fundo não vê, ela é medrosa... exita em entrar na água" - Friedrich Nietzsche.
[Email] [MSN]
ctdaa
JavaGuru
[Avatar]

Membro desde: 12/08/2009 19:01:45
Mensagens: 222
Offline

Pelo visto você vai atualizar quase todos (se não todos) os registros da tabela. Neste caso os utilitários costumam ser mais rápidos do que programas com SQL. Você pode montar um arquivo texto com os dados que você quer carregar/atualizar e depois usar como entrada para o utilitário. Todo banco de dados tem seu utilitário próprio. A sintaxe varia um pouco mas a filosofia é a mesma. Veja para mySQL: http://dev.mysql.com/doc/refman/5.1/en/load-data.html
[WWW]
gomesrod
GUJ Ranger
[Avatar]

Membro desde: 11/05/2007 19:46:22
Mensagens: 901
Offline

Isso tem mais cara de trabalho para Stored Procedure, não? Acho difícil conseguir essa iteração através de comando SQL.

Só de curiosidade: essa atualização em massa é feita rotineiramente no seu sistema? É "online", comandada pelo usuário, ou é uma tarefa com execução agendada?
RenataFA
Virtual Machine Man
[Avatar]

Membro desde: 24/08/2006 08:15:10
Mensagens: 698
Offline

Atualizacao agendada, roda diariamente, de madrugada pra não afetar.

Consegui fazer pra MySQL. Eu tô sem tempo pra nada aqui, joguei tudo pro alto e briquei com o SQL até que montei. Agora preciso parar alguma coisa pra poder fazer o msm pra Oracle e SQLServer.

Pra quem ficou curioso, pra MySQL ficou assim:



E respondendo aos amigos, eu tentei por store procedure, mas ficou mais lento, então abandonei.
Depois tento fazer pros demais BDs.

Obrigada pela ajuda.
Renata

[]'s, Renata
[Email]
 
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Ir para:   
Powered by JForum 2.1.8 © JForum Team