【问题标题】:creating PL/SQL procedure with altering timestamp使用更改时间戳创建 PL/SQL 过程
【发布时间】:2014-06-27 08:13:06
【问题描述】:
我需要在一个表中插入大量数据集,并想使用一个过程。所以我想使用一个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 数据集吗?
提前致谢……
【问题讨论】:
标签:
sql
oracle
stored-procedures
plsql
plsqldeveloper
【解决方案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;
它不只是复制数据。它也为时间戳添加了偏移量。如果仔细选择偏移量,您将获得所有唯一行。