使用更改时间戳创建PL / SQL过程

时间:2014-05-09 14:27:49

标签: sql oracle stored-procedures plsql plsqldeveloper

我需要在表中插入大量数据集并希望使用过程。所以我想使用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数据集的方法?

提前感谢...

1 个答案:

答案 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;

它不只是复制数据。它还为时间戳添加了一个偏移量。如果仔细选择了偏移量,您将获得所有唯一的行。