2015-05-11 219 views
1

我有一個觸發器必須設置一個時間戳到當前時間再加上兩個小時,當插入前該字段爲空。一個我試圖到目前爲止陳述是添加兩個小時到時間戳

IF :new.time_to_live IS NULL THEN 
    :new.time_to_live := sysdate + INTERVAL '0 02:00:00.0' HOUR TO MINUTE; 
END IF; 

但我得到一個PLS-00166錯誤(格式爲日期,時間,時間戳或時間間隔文字),第二行。也修改它在多個論壇中的幾個建議,但錯誤仍然存​​在。該列創建如下:

time_to_live timestamp(0) NOT NULL 

回答

6

你需要改變你的HOUR TO MINUTE以符合您實際傳遞的價值:您可能也想用systimestamp而不是sysdate

sysdate + INTERVAL '0 02:00:00.0' DAY TO SECOND 

。您可以使用更短的間隔文字太多,如果你一直在不斷增加正好兩小時。

systimestamp + INTERVAL '02:00' HOUR TO MINUTE 

或只是

systimestamp + INTERVAL '2' HOUR 

作爲一個快速演示:

SELECT systimestamp, systimestamp + INTERVAL '2' HOUR FROM DUAL; 

SYSTIMESTAMP      SYSTIMESTAMP+INTERVAL'2'HOUR  
----------------------------------- ----------------------------------- 
11-MAY-15 11.15.22.235029000 +01:00 11-MAY-15 13.15.22.235029000 +01:00 
3

Alther interval可真方便,我經常這樣寫:

IF :new.time_to_live IS NULL THEN 
    :new.time_to_live := sysdate + 2/24.0 
END IF; 

向日期添加整數將被視爲天數。 「2/24」是兩個小時。