Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

hellyson

[Resolvido] Atualizando registro com valor anterior

Recommended Posts

Bom dia camaradas, seguinte.

 

Recebi uma demanda para alterar a forma de auditar o campo status de um formulário que possuo, atualmente sempre que altera o status, cria um registro no histórico de status com o valor novo, porém agora eles querem gravar os dois, o valor antigo e o novo, para os novos registros é fácil, mas como o mundo não é perfeito, é imprescindível atualizar o legado e eu não estou encontrando uma formula para isso, segue abaixo os dados:

 

tabela: cliente_acompanhastatus

Campos atuais:

 

strRequestID (sequencial)

strInstanceId (não é sequencial, porém é único)

strStatusPara (antigo strStatus que armazenava somente o status novo)

strStatusDe (campo criado para pegar o valor strStatusPara

 

Segue o Update que criei, porém somente pega o primeiro valor, porém não deu certo, pois pega sempre o primeiro registro:

 

update

( select * from cliente_acompanhastatus) tab1

set

( tab1.strStatusDe ) =

(

select

strStatusPara

from

cliente_acompanhastatus tab2

where

tab1.strInstanceId = tab2.strInstanceId and

tab1.strRequestID > tab2.RstrRequestID and

rownum = 1

)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Utilizando trigger fica bem melhor...

http://ss64.com/sql/trigger_c.html

 

Só fiquei com duvida: "porque voce vai registrar o valor antigo e o novo juntos no log?"

 

Já que o antigo estará no log e o novo na tabela?!

 

 

Valeu pela ajuda Supernoi, sinceramente não conheço muito sobre trigger, mais vou dar uma pesquisada.

 

Os dois dados deverão estar na mesma tabela, até para efeito de relatório, a aplicação que trabalho é por workflow, então é muito restrito fazer joins e tal, por isso preciso ter o máximo de dados na mesma tabela.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Creio que ele quer extrair os dados da tabela de log de forma direta, e redundância mas no aspecto de reduzir joins pode ser válido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Creio que ele quer extrair os dados da tabela de log de forma direta, e redundância mas no aspecto de reduzir joins pode ser válido.

 

 

Exatamente Motta

 

Fiz outra query e deu certo, segue abaixo:

 

update

( select * from cliente_acompanhastatus) tab1

set

( tab1.strStatusDe ) =

(

select

strStatusPara

from

cliente_acompanhastatus tab2

where

tab1.strInstanceId = tab2.strInstanceId and

tab1.strRequestID > tab2.strRequestID and

tab2.strRequestID in

(

select

max(strRequestID)

from

cliente_acompanhastatus tab3

where

tab3.strInstanceId = tab2.strInstanceId and

tab1.strRequestID > tab3.strRequestID

)

)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.