我需要在表中插入大量数据集并希望使用过程。所以我想使用for循环并插入每个循环。但我必须插入一个“to_timestamp('18 .04.14 12:00:00'),每个循环必须减少一秒。
插入内容如下所示:
insert into sv_value(value, timestamp)
values (40, to_timestamp('18.04.14 12:00:00'))
程序应如何?或者是否有另一种插入100 Mio数据集的方法?
提前感谢...
答案 0 :(得分:1)
您可以使用数字轻松地从时间戳中减去时间。 1是一天,1/24是一小时,依此类推:
procedure insert_data
is
l_timestamp timestamp;
begin
l_timestamp := to_timestamp('18.04.14 12:00:00');
for ... loop
insert into sv_value(value, timestamp)
values (40, l_timestamp);
l_timestamp := l_timestamp - 1 / 24 / 60 / 60;
end;
end;
但是,PL / SQL循环将永远占用100 mio行。最好是创建一小组数据并将其复制几次。复制可能如下所示:
insert into sv_value(value, timestamp)
select value, timestamp - 5000 / 24 / 60 / 60
from sv_value;
它不只是复制数据。它还为时间戳添加了一个偏移量。如果仔细选择了偏移量,您将获得所有唯一的行。