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

Simpan hasil kueri minus dengan beberapa kolom dalam variabel di Oracle PL/SQL

SYS.ODCINUMBERLIST hanyalah daftar di mana setiap catatan memiliki satu nomor. Anda perlu menggunakan jenis rekaman baru untuk menyimpan beberapa bidang di setiap baris.

Anda dapat menentukan jenis rekaman yang akan digunakan sebagai pengganti SYS.ODCINUMBERLIST . Tapi saya cenderung untuk memindahkan SELECT pernyataan menjadi kursor eksplisit, sehingga Anda dapat mendefinisikan tipe baru sebagai kursor %ROWTYPE . Dengan begitu, tipe record Anda dan pernyataan pilih selalu konsisten, tetapi struktur kode Anda sedikit berubah.

Inilah pendekatan itu:

DECLARE 

  CURSOR c_select IS
      SELECT project_id, project_name
      FROM 
        (
          SELECT t1.project_id, t1.project_name FROM table_one t1
          MINUS
          SELECT t2.project_id, t2.project_name FROM table_two t2 );

  TYPE l_missing_row_list_typ IS TABLE OF c_select%ROWTYPE;
  l_missing_row_list l_missing_row_list_typ;
  
BEGIN
  OPEN c_select;
  FETCH c_select BULK COLLECT INTO l_missing_row_list;
  CLOSE c_select;
  
  FORALL i IN l_missing_row_list.FIRST..l_missing_row_list.LAST
    INSERT INTO table_two VALUES ( l_missing_row_list(i).project_id, l_missing_row_list(i).project_name );
    
  COMMIT;
  
  -- Values are now inserted and you have the list of IDs in l_missing_row_list to add to your email.
END;

Satu catatan tentang BULK COLLECT (baik di sini dan di pos asli Anda) -- data yang Anda kumpulkan secara massal disimpan dalam memori PGA. Jadi jangan gunakan kode ini karena jika ada perubahan jumlah record baru akan tidak masuk akal (mungkin lebih dari beberapa ribu).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apakah ada cara agar kumpulan koneksi JBoss terhubung kembali ke Oracle ketika koneksi menjadi buruk?

  2. Kesalahan (ORA-00923:FROM kata kunci tidak ditemukan di tempat yang diharapkan)

  3. Mengapa saya mendapatkan fungsi LISTAGG error berikut:“hasil penggabungan string terlalu panjang?*

  4. Oracle Rolling atau Running total per bulan

  5. PHP - oci_connect tidak ditemukan