jonearles, верно, лучший способ - использовать обычный SQL - вставьте + выберите.
Если у вас есть бизнес-логика, требующая построчную обработку в 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по одному на каждую запись.