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

Permintaan pembaruan berganda Oracle

Berikut ini mengasumsikan bahwa ITEM_CODE hanya ditetapkan ke satu DEPARTMENT_CODE, karena sederhana dan Anda belum memberi kami aturan bisnis lebih lanjut. Jika asumsi ini salah, Anda perlu menyesuaikan logikanya.

Saya juga telah memasukkan persyaratan Anda bahwa nilai COMPETITOT.COMPETITOR_CODE yang ada tidak dapat diandalkan.

Mengingat tanggal tes ini:

SQL> select * from competitor
  2  /

STORE_CODE  ITEM_CODE DEPARTMENT_CODE COMPETITOR
---------- ---------- --------------- ----------
        11     912003              14 01
        11     912003              14 04
        11     912003              14 03
        11     912004              14 01
        11     912004              14 02
        11     912004              14 04
        11     914001              14 01
        11     914001              14 02
        11     914001              14 05

9 rows selected.

SQL>

Kita dapat menggunakan ROW_NUMBER() analitik untuk menghasilkan pegangan yang diperlukan untuk COMPETITOR_CODE:

SQL> update competitor c
  2  set competitor_code =
  3          (select decode (dr
  4                         , 1, 'Comp_1'
  5                         , 2, 'Comp_2'
  6                         , 3, 'Comp_3')
  7             from ( select row_number() over ( partition by x.item_code
  8                                                  order by x.rowid ) as dr
  9                           , x.rowid as row_id
 10                    from competitor x
 11                    where x.item_code in ( select item_code
 12                                           from item
 13                                           where  department_code = 14 ) ) l
 14             where c.rowid = l.rowid )
 15  /

9 rows updated.

SQL>

Dan inilah hasil yang diinginkan (kecuali ada penambahan lebih lanjut pada aturan bisnis):

SQL> select * from competitor
  2  /

STORE_CODE  ITEM_CODE DEPARTMENT_CODE COMPETITOR
---------- ---------- --------------- ----------
        11     912003              14 Comp_1
        11     912003              14 Comp_2
        11     912003              14 Comp_3
        11     912004              14 Comp_1
        11     912004              14 Comp_2
        11     912004              14 Comp_3
        11     914001              14 Comp_1
        11     914001              14 Comp_2
        11     914001              14 Comp_3

9 rows selected.

SQL>



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Migrasi data antara DBMS yang berbeda

  2. Bagaimana cara melewatkan parameter boolean ke prosedur Oracle C #

  3. Memasukkan ke dalam dua tabel oracle dengan urutan

  4. Bisakah driver yang dikelola Oracle menggunakan async/menunggu dengan benar?

  5. Mengapa kueri Oracle 12c memerlukan tanda kutip ganda di sekitar tabel?