2015-01-21 68 views
2

我不知道甲骨文所有,但我需要写是这样的:增量多时间戳值

的MySQL:

SET @serial:=1; 
    UPDATE table1 SET t = t + INTERVAL (@serial:[email protected]+1) SECOND;` 

更新和一秒递增时间戳为所有记录。如何在Oracle中做到这一点?

问题更新: 我的措辞并没有很好地解释我的问题。

我想有一个变量(TimeStamp)。

然后遍历所有记录,每次增加此变量一秒钟以进行记录更新。

回答

2

它应该是这样的按照我的理解

DECLARE 
    serial number := 1; 
BEGIN 
    update table1 set t= t + ((serial + rownum - 1)/86400); 
END; 

这将做增量像下面

1st row -> 1 sec 
2nd row -> 2 sec 
. 
. 
nth row -> nsec 

虽然serial从1开始

1

其实很简单。只要做到:

update table1 set t = t + 1/86400; 

问题更新后,你可以这样做:

DECLARE 
    t_serial number; 
    cursor c is select * from table1 for update of t; 
    cr table1%rowtype; 
BEGIN 
    t_serial := 1; 
    for cr in c loop 
     UPDATE table1 SET t = t_serial/86400 WHERE CURRENT OF c; 
     t_serial := t_serial + 1; 
    end loop; 
END; 
+0

哇。你是对的,这很简单。谢谢 – morne 2015-01-21 11:10:08

+0

好的,只有一个问题。我的错我没说得好。不管记录中的时间如何,我想从一个开始时间更新所有记录。我将编辑上面的问题。 – morne 2015-01-21 11:14:58

2

另一种方式是

update table1 set t= t + interval '1' second; 

了解更多关于Interval literals


根据您的更新,它应该b È

DECLARE 
    t_update_time date := sysdate; 
BEGIN 
    update table1 set t=t_update_time + interval '1' second; 
END; 

该片段当前日期时间指派给t_update_time变量,和1秒加到t_update_time声明的日期时间更新该记录。相应地更改t_update_time分配。


没有一个PL/SQL开关应该作为

update table1 set t=to_date('21.01.2015 09:00:00','dd.mm.rrrr hh:mi:ss') + interval '1' second; 
+0

好吧,只有一个问题。我的错我没说得好。不管记录中的时间如何,我想从一个开始时间更新所有记录。我将编辑上面的问题。 – morne 2015-01-21 11:18:43

+0

请参阅更新,我认为这是您的要求。 – Sathya 2015-01-21 11:22:46