【发布时间】:2012-08-08 22:47:22
【问题描述】:
我有 2 个表 - student 和 studLoad 都有 2 个字段 studID 和 studName。我想将student 表中的数据加载到stuLoad 表中。
如果数据已经存在于studLoad 表中,那么应该更新它,否则应该插入它。以下是我的代码:
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 Server 中,我们使用IF EXISTS(select...from stuLoad..) 来检查表中是否存在记录,在 Oracle 中有没有办法做同样的事情?如果是,请让我知道。
【问题讨论】:
-
您的代码无法正常工作,因为它没有按照您所说的进行操作。我很惊讶为什么它不会抛出异常。 NO_DATA_FOUND 记录不匹配时的异常。评估是否插入记录的 IF 条件是错误的,因为它只会插入新的重复项。如果 studId 在 studLoad 和 student 表中都是唯一的,Ben 提出的解决方案可以正常工作。