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

Kursor bersarang di kursor

Biasanya, Anda hanya akan bergabung dengan dua tabel.

FOR some_cursor IN (SELECT s.col1,
                           s.col2
                      FROM sometable s
                           JOIN temp_table t ON (s.col3 = t.col1))
LOOP
  <<do something>>
END LOOP

Karena Anda mengkhawatirkan efisiensi, bagaimanapun

  • Apakah TEMP_TABLE benar-benar meja sementara? Jika demikian, mengapa? Sangat jarang Oracle benar-benar perlu menggunakan tabel sementara sehingga membuat saya curiga bahwa Anda mungkin melakukan sesuatu yang tidak efisien untuk mengisi tabel sementara.
  • Mengapa Anda memiliki kursor FOR loop untuk memproses data dari TEMP_TABLE ? Pemrosesan baris demi baris adalah cara paling lambat untuk melakukan apa pun di PL/SQL sehingga umumnya akan dihindari jika Anda khawatir tentang efisiensi. Dari sudut pandang kinerja, Anda ingin memaksimalkan SQL sehingga daripada melakukan loop yang melakukan serangkaian baris tunggal INSERT atau UPDATE operasi, Anda akan melakukan satu INSERT atau UPDATE yang memodifikasi seluruh rangkaian baris. Jika Anda benar-benar perlu memproses data dalam potongan, di situlah koleksi PL/SQL dan pemrosesan massal akan berperan, tetapi itu tidak akan seefisien SQL biasa.
  • Mengapa Anda memiliki DISTINCT dalam kueri Anda terhadap TEMP_TABLE ? Apakah Anda benar-benar berharap akan ada duplikat big_id nilai yang tidak salah? Sebagian besar waktu, orang menggunakan DISTINCT salah baik untuk menutupi masalah di mana data telah digabungkan secara tidak benar atau di mana Anda memaksa Oracle untuk melakukan pengurutan yang mahal untuk berjaga-jaga jika data yang salah dibuat di masa mendatang ketika batasan akan menjadi cara yang lebih tepat untuk melindungi diri Anda sendiri.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Memilih tanggal dengan penjualan maksimum untuk setiap departemen

  2. Contoh Untuk Kursor PLSQL - Kursor Eksplisit, Implisit, dan Ref

  3. mengekstraksi karakter khusus dari string di Oracle sql

  4. Haruskah saya mempartisi/subpartisi tabel saya?

  5. Oracle - Apa yang terjadi saat menyegarkan tampilan 'REFRESH FORCE ON DEMAND' dengan DBMS_MVIEW.REFRESH