Update com subquery no Oracle

Categoria: Oracle
Publicado em 19 de Junho de 2013

A sintaxe do update do Oracle, apesar de não suportar updates com JOIN como no MySQL, possui uma característica que permite utilizar uma subquery que executa a tarefa de uma forma similar:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
UPDATE 
   PORTOS PT
SET 
   (
      TOTAL_NAVIOS, 
      TOTAL_CAPACIDADE_NAVIOS
   ) 
   =
   (
      SELECT   
         COUNT(S.NAVIO_ID) TOTAL_NAV,
         SUM(S.CAPACIDADE) TOTAL_CAPACIDADE_NAV
      FROM     
         NAVIOS S
      WHERE    
         S.PORTO_ID = PT.PORTO_ID
      GROUP BY 
         S.PORTO_ID
   )
;

Repare que a query trabalha com duas tabelas: Portos e Navios. A tabela portos possui o alias "PT" e a tabela navios o alias "S". 

O relacionamento entre as duas tabelas ocorre na linha 16. Os campos modificados são os da linha 5 e 6 e os valores são obtidos nas linhas 11 e 12.


 

Copyright © Fernando Hidemi Uchiyama 2010 - Todos os direitos reservados