INSERT-und UPDATE eines Datensatzes mittels Cursor in oracle

Ich habe 2 Tabellen- student und studLoad beide haben 2 Felder studID und studName. Ich möchte zum laden von Daten aus student Tabelle in stuLoad Tabelle.
Wenn die Daten bereits vorhanden sind, in die studLoad Tabelle, dann sollte es aktualisiert werden, sonst kommt es eingefügt werden soll. Folgendes ist mein code dazu:

    create or replace procedure studentLoad is
v_id student.studID%type;
v_name student.studName%type;
v_sn studLoad.studName%type;
cursor cur_load is
select * from student;


begin
  open cur_load;
  loop
   fetch cur_load into v_id,v_name;

   exit when cur_load%notfound;
   select studName into v_sn from studLoad where studID = v_id;
   if(v_sn!= v_name) then
      update studLoad set studName= v_name where studID= v_id;
   else
      insert into studLoad values(v_id,v_name);
   dbms_output.put_line(v_id || ' ' || v_name);
   end if;
  end loop;
      close cur_load;
end;

Funktioniert es nicht. die Zeilen in studLoad-Tabelle nicht aktualisiert. Wie kann ich dieses Problem lösen? In SQL server verwenden wir IF EXISTS(select...from stuLoad..) um zu überprüfen, ob der Datensatz in der Tabelle vorhanden, gibt es eine Möglichkeit, das gleiche zu tun in Oracle? wenn ja, dann bitte lassen Sie mich wissen, die gleichen.

möglich, Duplikat der Oracle: wie UPSERT (update oder insert in eine Tabelle?)
Dein code funktioniert nicht gut, weil es nicht das tut, was du redest. Ich bin überrascht, warum es nicht Ausnahmen. NO_DATA_FOUND-Ausnahme im Fall nicht übereinstimmender Datensätze. Die IF-Bedingung zu evaluieren, wenn es der Fall ist, zum einfügen der Datensätze ist falsch, denn es würde einfügen nur neue Duplikate. Ben vorgeschlagene Lösung würde funktionieren, wenn studId ist einzigartig in beide studLoad und Schüler Tabellen.

InformationsquelleAutor z22 | 2012-08-12

Schreibe einen Kommentar