将数据从一个表插入到一个单列另一个没有关系的表
Posted
技术标签:
【中文标题】将数据从一个表插入到一个单列另一个没有关系的表【英文标题】:insert data from one table to a single column another table with no relation 【发布时间】: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 语句添加了一个新列,我需要填充从另一个表中获取的值! 【参考方案1】:我认为你可以像这样使用merge
:
merge into target_tab t
using (
select s.rsrc_nm, t.rwd
from (select row_number() over (order by acc_no) rn, t.*, rowid rwd
from target_tab t) t
join (select row_number() over (order by rsrc_nm) rn, s.*
from source_tab s) s
on t.rn =s.rn
) s
on (t.rowid = s.rwd)
when matched then update set t.sc_vlan = s.rsrc_nm
对两个表中任意列的数据进行排序,使用row_number
匹配它们并更新。
【讨论】:
感谢 Ponder,它正在工作让我尝试使用更大数据集的原始表。这句话真好!以上是关于将数据从一个表插入到一个单列另一个没有关系的表的主要内容,如果未能解决你的问题,请参考以下文章