Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

CHÈN và CẬP NHẬT bản ghi bằng cách sử dụng con trỏ trong oracle

Đây là một cách làm rất kém hiệu quả. Bạn có thể sử dụng merge và sau đó không cần con trỏ, vòng lặp hoặc (nếu bạn có thể làm mà không có) 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)

Đảm bảo rằng bạn commit , sau khi hoàn thành, để có thể thấy điều này trong cơ sở dữ liệu.

Để thực sự trả lời câu hỏi của bạn, tôi sẽ làm như sau. Điều này có lợi khi thực hiện hầu hết công việc trong SQL và chỉ cập nhật dựa trên rowid, một địa chỉ duy nhất trong bảng.

Nó khai báo một kiểu mà bạn đặt dữ liệu trong số lượng lớn, 10.000 hàng cùng một lúc. Sau đó, xử lý các hàng này riêng lẻ.

Tuy nhiên, như tôi đã nói điều này sẽ không hiệu quả bằng 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. Oracle Floats so với Number

  2. Làm thế nào để thực hiện một thủ tục được lưu trữ oracle?

  3. Làm thế nào để ZIP một tệp trong PL / SQL?

  4. Oracle hiển thị hơn 24 giờ

  5. Tìm ra không gian trống trên không gian bảng