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

Cara tercepat untuk melakukan perbandingan bidang di tabel yang sama dengan sejumlah besar data di Oracle

Pertama-tama saya percaya bahwa tugas Anda dapat diimplementasikan (dan harus benar-benar) dengan SQL staight. Tidak ada kursor mewah, tidak ada loop, hanya memilih, menyisipkan, dan memperbarui. Saya akan mulai dengan menghapus data sumber Anda (tidak jelas apakah Anda memiliki kunci utama untuk menggabungkan dua set, saya kira Anda punya):

Col0_PK    Col1    Col2    Col3    Col4
----------------------------------------
Row1_val   A       B       C       D
Row2_val   E       F       G       H

Di atas adalah sumber data Anda. Menggunakan UNPIVOT klausa kita ubah menjadi:

Col0_PK     Col_Name    Col_Value
------------------------------
Row1_val    Col1        A
Row1_val    Col2        B
Row1_val    Col3        C
Row1_val    Col4        D
Row2_val    Col1        E
Row2_val    Col2        F
Row2_val    Col3        G
Row2_val    Col4        H

Saya pikir Anda mendapatkan ide. Katakanlah kita memiliki table1 dengan satu set data dan table2 terstruktur yang sama dengan set data kedua. Sebaiknya gunakan tabel yang disusun berdasarkan indeks.

Langkah selanjutnya adalah membandingkan baris satu sama lain dan menyimpan detail perbedaan. Sesuatu seperti:

insert into diff_details(some_service_info_columns_here)
 select some_service_info_columns_here_along_with_data_difference
  from table1 t1 inner join table2 t2
     on t1.Col0_PK = t2.Col0_PK
    and t1.Col_name = t2.Col_name
    and nvl(t1.Col_value, 'Dummy1') <> nvl(t2.Col_value, 'Dummy2');

Dan pada langkah terakhir kami memperbarui tabel ringkasan perbedaan:

insert into diff_summary(summary_columns_here)
 select diff_row_id, count(*) as diff_count
  from diff_details
 group by diff_row_id;

Ini hanya draf kasar untuk menunjukkan pendekatan saya, saya yakin masih banyak detail yang harus diperhitungkan. Untuk meringkas saya menyarankan dua hal:

  1. UNPIVOT data
  2. Gunakan SQL pernyataan alih-alih kursor


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menggunakan 'kolom ekspresi kasus' di mana klausa

  2. Menggabungkan interval validitas tanggal yang berurutan

  3. menggunakan sqlldr dari java

  4. ADDM di SearchOracle.com

  5. Oracle Database 21c untuk platform Linux