Oracle
 sql >> Baza danych >  >> RDS >> Oracle

WSTAW i AKTUALIZUJ rekord za pomocą kursorów w oracle

Jest to bardzo nieefektywny sposób robienia tego. Możesz użyć merge i wtedy nie ma potrzeby używania kursorów, pętli lub (jeśli można się bez tego obejść) 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)

Upewnij się, że commit , po zakończeniu, aby móc to zobaczyć w bazie danych.

Aby właściwie odpowiedzieć na twoje pytanie, zrobiłbym to w następujący sposób. Ma to tę zaletę, że wykonuje większość pracy w SQL i aktualizuje tylko na podstawie rowid, unikalnego adresu w tabeli.

Deklaruje typ, w którym umieszczasz dane zbiorczo, po 10 000 wierszy na raz. Następnie przetwarza te wiersze indywidualnie.

Jednak, jak mówię, nie będzie to tak wydajne, jak 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. jak powielić moje wyniki sql?

  2. Krok po kroku R12.2.6 Instalacja EBS na Virtual Box Część -2

  3. Pierwsze kroki z Oracle Application Express-APEX

  4. Wprowadzenie do zmiennych PL/SQL w bazie danych Oracle

  5. Wprowadzenie do obsługi wyjątków PL/SQL w bazie danych Oracle