我有2個表 - student
和studLoad
都有2個字段studID
和studName
。我想從student
表中加載數據到stuLoad
表。 如果數據已經存在於studLoad
表中,則應該更新它,否則應該插入它。以下是我的代碼這樣做:在oracle中使用遊標插入和更新記錄
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;
它不工作。 studLoad表中的行不會更新。我該如何解決這個問題?在SQL服務器中,我們使用IF EXISTS(select...from stuLoad..)
來檢查表中是否存在該記錄,是否有辦法在Oracle中執行相同的操作?如果是的話,請讓我知道一樣。
的可能重複的[甲骨文:如何UPSERT(?更新或插入到一個表)](http://stackoverflow.com/questions/237327/oracle-how-to-upsert-update-or-插入表格) – Ben 2012-08-12 12:03:23
你的代碼工作不正常,因爲它沒有在做你正在談論的內容。我很驚訝爲什麼它不會拋出異常。在不匹配記錄的情況下爲NO_DATA_FOUND異常。 IF條件來評估是否插入記錄是錯誤的,因爲它只會插入新的重複項。如果studId在studLoad和學生表中都是唯一的,那麼Ben建議的解決方案可以正常工作。 – 2012-08-12 13:47:35