hellyson 0 Denunciar post Postado Maio 13, 2011 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
supernoi 0 Denunciar post Postado Maio 13, 2011 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?! Compartilhar este post Link para o post Compartilhar em outros sites
hellyson 0 Denunciar post Postado Maio 13, 2011 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
supernoi 0 Denunciar post Postado Maio 13, 2011 What's hell?! Voce tem 1 tabela para ser de produção e de log? é isso? Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Maio 13, 2011 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
hellyson 0 Denunciar post Postado Maio 13, 2011 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