Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Oracle 10g PL/SQL — Wybierz wyniki jako zaktualizuj wartości kolumn

Swoją krytykę ograniczę do stwierdzenia, że ​​projekt twojego stołu nie jest znormalizowany i nie jest zbyt ładny, ale zakładam, że masz swoje powody. Zazwyczaj te zapytania „rotacyjne” wykonuję za pomocą DECODE połączonego z kolumną agregującą, grupując według mojego klucza - w tym przypadku pseudoklucza, trunc(ID/100). Połącz to ze składnią aktualizacji, która używa krotek:

 UPDATE Foo
    SET (a, b, c, d)
      = (w, x, y, z);

i otrzymujesz:

  UPDATE KeyMap
     SET
       ( key1
       , key2
       , key3
       , key4
       ...
       , key99
       )
       = ( SELECT MAX(decode(mod(ID, 100), 1, Key, NULL))
                , MAX(decode(mod(ID, 100), 2, Key, NULL))
                , MAX(decode(mod(ID, 100), 3, Key, NULL))
                , MAX(decode(mod(ID, 100), 4, Key, NULL))
                ...
                , MAX(decode(mod(ID, 100), 99, Key, NULL))
             FROM Source
            WHERE Trunc(Source.ID / 100) = KeyMap.batchId
            GROUP BY Trunc(Source.ID / 100)
         )
   WHERE BatchId = <x>;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Replikacja Oracle 11g — korzystanie z odświeżania przy zatwierdzeniu ze zdalną bazą danych (łącza do bazy danych)

  2. Blokowanie Oracle za pomocą SELECT...FOR UPDATE OF

  3. Tworzenie DDL dla linii bazowej dla drogi przelotu

  4. Nie znaleziono polecenia - bash :sqlplus:

  5. Chcę przypisać użytkownikowi uprawnienia do wyświetlania tabeli EMP