Dúvida sobre Update com select

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
xprata
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 93
Registrado em: Ter, 06 Abr 2010 11:31 am
Localização: São Paulo - SP

Boas senhores,
Seguinte tenho a seguinte query?

Selecionar tudo

select descricao,vl1,vl2,vajustemais,vajustemenos,menor,maior
 ,case 
       when condicao1 and  then vajustemenos
       when condicao2 then nvl(vl1,0)
       when condicao3 then vl1-vl2
       end Menor
 ,case 
       when condicaoX then vajustemais
       when condicaoY then nvl(vl2,0)
       when condicaoZ then nvl(vl2-vl1,0)
       end Maior
from  tabela1 tab1
join (select campo1 from tabela2) tab2 on tab2.codigo = tab1.codigo --(usado nas condições)
where data between to_date('01/01/2018','dd/mm/yyyy') and to_date('22/01/2018 23:59:59','dd/mm/yyyy hh24:mi:ss')
A query traz as informações de maior e menor e este valor preciso atualizar 2 campos na tabela1. Exemplo
update tabela1 set outrovalor1 = menor, outrovalor2 = maior
where (resultado do select)

Gostaria da ajuda para construir uma query de update, pois estou com problema por conta do join...
Obrigado
t+
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Olá,
Pelo que compreendi tu queres atualizar o valor do campo da Tab1 de acordo com os dados da Tab2 , seguindo certas condições.
Como tu não colocaste de qual tabela é cada campo, não consegui fazer melhor. Mas a idéia seria que para cada campo que precisa ser alterado, faz-se um subselect com os joins entre as tabelas e as condições desejadas:

Selecionar tudo

UPDATE tabela1 tab1
   SET tab1.valorMAIOR = (Select case when condicaoX then vajustemais
                                      when condicaoY then nvl(vl2,0)
                                      when condicaoZ then nvl(vl2-vl1,0)
                                      end Maior
                            from tabela2 tab2
                           where tab2.codigo = tab1.codigo
                              )
     , tab1.valorMENOR = (Select case when condicao1 and  then vajustemenos
                                      when condicao2 then nvl(vl1,0)
                                      when condicao3 then vl1-vl2
                                      end Menor
                            from tabela2 tab2
                           where tab2.codigo = tab1.codigo 
                              )
where data between to_date('01/01/2018','dd/mm/yyyy') and to_date('22/01/2018 23:59:59','dd/mm/yyyy hh24:mi:ss');
xprata
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 93
Registrado em: Ter, 06 Abr 2010 11:31 am
Localização: São Paulo - SP

ok, obrigado pelo retorno...
Vou dar uma olhada e retorno...
Mas os dados são da mesma tabela1 uso um campo da tabela2 nas regras do case....
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 17 visitantes