我有两个名为“AA”和“AB”的表
cuno
我需要从“AA”表中获取cust_no并将其放入“AB”表的cuno列。
我在这里尝试了一些代码......
declare
Type Ty_Handoff_Pc Is Table Of aa%Rowtype Index By Binary_Integer;
Type sam Is Table Of ab%rowtype;
l_pc Ty_Handoff_Pc;
l_ab sam;
begin
select distinct cust_no bulk collect into l_pc from aa;
for j in 1 .. 10 loop
l_ab(j) := l_pc(j).cust_no;
insert into ab values l_ab(j);
end loop;
end;
感谢提前
答案 0 :(得分:3)
jonearles,是对的,最好的方法是使用常规SQL - insert + select。
但是,如果您的某些业务逻辑需要PL / SQL中的逐行处理,那么您可以使用与您所拥有的略有不同的变体:
declare
Type Ty_Handoff_Pc Is Table Of aa%Rowtype Index By Binary_Integer;
Type sam Is Table Of ab%rowtype;
l_pc Ty_Handoff_Pc;
l_ab sam;
begin
select distinct cust_no bulk collect into l_pc from aa;
for j in 1 .. l_pc.count loop
l_ab(j).cuno := l_pc(j).cust_no;
-- perhaps some other processing here...
end loop;
FORALL i in 1..l_ab.count
insert into ab values l_ab(i);
end;
FORALL最后的优点是插件是使用批量in-bind数组完成的,所以每次只记录一次SQL引擎而不是每次记录。
答案 1 :(得分:2)
您无法批量收集到关联数组中。您应该使用基于列类型而不是表行类型定义的嵌套表。
declare
type Ty_Handoff_Pc is table of aa.cust_no%type;
Type sam Is Table Of ab%rowtype;
l_pc Ty_Handoff_Pc;
begin
select distinct cust_no bulk collect into l_pc from aa;
for j in 1 .. l_pc.count loop
insert into ab values(l_pc(j));
end loop;
end;
/
编辑:正如Jeffrey Kemp指出的那样,你可以批量收集到一个关联数组。
如果这是真正的代码,而不仅仅是学习,你肯定应该在常规SQL中进行。 insert into ab(custno) select distinct cust_no from aa
比使用PL / SQL要快得多。
答案 2 :(得分:0)
declare
type taba is recor(cust_no aa.cust_no%type);
type tabb is table of taba;
custno_t tabb;
begin
select cust_no bulk collect into custno_t from aa;
forall i in custno_t.first..custno_t.last
insert into bb values custno_t(i);
commit;
end;