2015-01-21 60 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