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

INSERT dan UPDATE catatan menggunakan kursor di oracle

Ini adalah cara yang sangat tidak efisien untuk melakukannya. Anda dapat menggunakan merge pernyataan dan kemudian tidak perlu kursor, perulangan atau (jika Anda dapat melakukannya tanpa) PL/SQL.

MERGE INTO studLoad l
USING ( SELECT studId, studName FROM student ) s
ON (l.studId = s.studId)
WHEN MATCHED THEN
  UPDATE SET l.studName = s.studName
   WHERE l.studName != s.studName
WHEN NOT MATCHED THEN 
INSERT (l.studID, l.studName)
VALUES (s.studId, s.studName)

Pastikan Anda commit , setelah selesai, agar dapat melihat ini di database.

Untuk benar-benar menjawab pertanyaan Anda, saya akan melakukannya seperti berikut. Ini memiliki keuntungan melakukan sebagian besar pekerjaan di SQL dan hanya memperbarui berdasarkan rowid, alamat unik dalam tabel.

Ini mendeklarasikan tipe, di mana Anda menempatkan data dalam jumlah besar, 10.000 baris sekaligus. Kemudian proses baris ini satu per satu.

Namun, seperti yang saya katakan ini tidak akan seefisien merge .

declare

   cursor c_data is
    select b.rowid as rid, a.studId, a.studName
      from student a
      left outer join studLoad b
        on a.studId = b.studId
       and a.studName <> b.studName
           ;

   type t__data is table of c_data%rowtype index by binary_integer;
   t_data t__data;

begin

   open c_data;
   loop
      fetch c_data bulk collect into t_data limit 10000;

      exit when t_data.count = 0;

      for idx in t_data.first .. t_data.last loop
         if t_data(idx).rid is null then
            insert into studLoad (studId, studName)
            values (t_data(idx).studId, t_data(idx).studName);
         else
            update studLoad
               set studName = t_data(idx).studName
             where rowid = t_data(idx).rid
                   ;
         end if;
      end loop;

   end loop;
   close c_data;

end;
/


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pembaruan Patch Kritis Oracle – Oktober 2020

  2. Ubah interval menjadi menit

  3. Apa yang dapat menyebabkan ROWID Oracle berubah?

  4. Hasil Cache

  5. Bagaimana cara menghasilkan UUID versi 4 (acak) di Oracle?