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
  

Mensagemem Seg, 22 Jan 2018 9:57 am

Boas senhores,
Seguinte tenho a seguinte query?

Código: Selecionar todos
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+
xprata
Localização: São Paulo - SP

Mensagemem Seg, 22 Jan 2018 10:08 am

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:

Código: Selecionar todos
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');
DanielNN
Localização: Fortaleza - CE

att,

Daniel N.N.

Mensagemem Seg, 22 Jan 2018 1:08 pm

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....
xprata
Localização: São Paulo - SP



Voltar para PL/SQL

Quem está online

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