【发布时间】:2017-04-28 12:37:37
【问题描述】:
我需要将数据插入到已经有一些数据的表中,现在向表中添加了一个新列,我们需要使用另一个表中的值插入/更新新列。
create table target_tab (fname varchar2(20), acc_no number);
insert into target_tab values('Anybody',121);
insert into target_tab values('Somebody',122);
insert into target_tab values('Nobody',123);
alter table target_tab add sc_vlan varchar2(20);
create table source_tab (rsrc_nm varchar2(20));
insert into source_tab values ('2839_124');
insert into source_tab values('2839_125');
insert into source_tab values('2839_126');
insert into source_tab values('2840_131');
insert into source_tab values('2841_132');
insert into source_tab values('2840_134');
insert into source_tab values('2840_127');
现在我们需要将 source_tab 中 rsrc_nm 列的值插入到 target_tab 的 scvlan 列中。
注意:我们在两个表之间没有任何关系,就像我们在示例中看到的那样,target_tab 的行数少于 source_tab,那么只有 target_tab 中的行应该使用 source_tab 中的唯一值插入/更新。 我们可以从 source_tab 中获取任何值。
declare
cursor c_1 is select rsrc_nm
from source_tab
where rownum <= (select count(1)
from target_tab);
type t_tab is table of c_1%rowtype index by pls_integer;
l_tab t_tab;
begin
open c_1;
fetch c_1 bulk collect into l_tab;
for i in 1..l_tab.count
loop
update target_tab set sc_vlan = l_tab(i).rsrc_nm
where sc_vlan is null
and rownum = 1;
commit;
exit when c_1%notfound;
end loop;
close c_1;
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line(SQLERRM);
dbms_output.put_line(dbms_utility.format_error_backtrace());
end;
【问题讨论】:
-
你的代码和你的表结构不匹配,真的不清楚你想做什么。
-
是的,不幸的是,我的代码没有达到我的要求!但是我看不到表结构和代码不匹配的原因可能是我不清楚要求。我有一个表,现在在这个新列中使用 alter 语句添加了一个新列,我需要填充从另一个表中获取的值!
标签: sql oracle plsql oracle11g