Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle 10g PL/SQL- Изберете резултати като стойности на колона за актуализиране

Ще огранича критиката си, за да кажа, че дизайнът на вашата таблица не е нормализиран и не е много красив, но предполагам, че имате своите причини. Обикновено правя тези заявки за "завъртане", като използвам DECODE, комбиниран с обобщена колона, групиране по моя ключ - в този случай вашият псевдоключ, trunc(ID/100). Комбинирайте това със синтаксиса за актуализиране, който използва кортежи:

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

и получавате:

  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. Бавна производителност за факторинг на дълбоко вложени подзаявки (CTE)

  2. В тригер на Oracle мога ли да присвоя ново и старо към променлива тип ред?

  3. Oracle Spatial - изберете обекти, попадащи в зоната

  4. Вземете ID на последния вмъкнат запис в oracle db

  5. oracle pl/sql води до един низ