Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Oracle 10g PL/SQL- Pilih hasil sebagai nilai kolom pembaruan

Saya akan membatasi kritik saya untuk mengatakan bahwa desain tabel Anda tidak dinormalisasi, dan tidak terlalu cantik, tetapi saya akan menganggap Anda memiliki alasan. Saya biasanya melakukan kueri "rotasi" ini dengan menggunakan DECODE yang dikombinasikan dengan kolom agregat, dikelompokkan berdasarkan kunci saya - dalam hal ini, kunci semu Anda, trunc(ID/100). Gabungkan itu dengan sintaks pembaruan yang menggunakan tupel:

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

dan Anda mendapatkan:

  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. Masalah versi akses data Oracle

  2. Cara mematikan semua sesi Oracle aktif dan tidak aktif untuk pengguna

  3. Kapan saya perlu menggunakan titik koma vs garis miring di Oracle SQL?

  4. Membaca teks Arab dari database Oracle yang dikodekan dalam WE8ISO8859P1 menggunakan java

  5. Bagaimana cara mengatur batas waktu koneksi di groovy sql?