对于循环 - 在ORACLE中插入空行

时间:2016-07-26 11:38:42

标签: oracle loops for-loop insert

我希望将空白记录插入表中,以获得最终值为57,516,000条记录。我从一个包含550个唯一标识符的表开始,每个不同的TMC名称,我想为每个不同的值添加105,119条记录。因此每个TMC将有105,120条记录。 (105,119 * 550 = 57,515,450(+原始550 = 57,516,000))

但是,我遇到的问题是TOAD中的错误说这个。

ORA-03113:通信频道上的文件结束 进程ID:10272 会议ID:247序列号:1959 脚本将结束

它的规模很小但我怀疑它不是最好的方法。下面是我的脚本。有什么建议吗?

declare i number(10) :=1;

begin

for i in 1..105119

Loop
insert into npmrds_dummy 
select distinct tmc,
travel_time_passenger_vehicles,
travel_time_freight_trucks,
travel_time_all_vehicles,
road_number,
road_name,
epoch,
distance,
date1,
admin_level_1,
admin_level_2,
admin_level_3

 from npmrds_dummy;

end loop;
end;

1 个答案:

答案 0 :(得分:1)

您可以使用一个SQL语句执行此操作:

insert into npmrds_dummy 
      select  npmrds_dummy.*
      from    npmrds_dummy
      inner join ( select 1 from dual connect by level <= 105119 )

与子选择的连接是a neat trick以乘以记录数。

在开始时您的记录是唯一的,不需要distinct,您只需select npmrds_dummy.*