sql >> Database >  >> RDS >> Oracle

INSERT en UPDATE een record met behulp van cursors in orakel

Dit is een zeer inefficiënte manier om het te doen. U kunt de merge . gebruiken statement en dan zijn er geen cursors, looping of (als je zonder) PL/SQL nodig hebt.

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)

Zorg ervoor dat u zich commit , eenmaal ingevuld, om dit in de database te kunnen zien.

Om uw vraag daadwerkelijk te beantwoorden, zou ik het ongeveer als volgt doen. Dit heeft het voordeel dat het meeste werk in SQL wordt gedaan en alleen wordt bijgewerkt op basis van de rowid, een uniek adres in de tabel.

Het declareert een type, waarin u de gegevens in bulk plaatst, 10.000 rijen tegelijk. Verwerkt deze rijen vervolgens afzonderlijk.

Zoals ik al zei, zal dit echter niet zo efficiënt zijn als 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 implementeren vanuit bronbeheer

  2. SQL Server Failover Cluster Installatie -4

  3. Lijst met datum/tijd-indelingselementen in Oracle

  4. Top 5 tools voor gegevensmodellering voor SQL Server