我有一个触发器,该触发器必须将时间戳设置为当前时间加上两个小时(插入前该字段为空)。到目前为止,我尝试过的一种说法是

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

最佳答案

您需要更改HOUR TO MINUTE以匹配您实际传递的值:

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

您可能还想使用systimestamp而不是sysdate。如果您始终要恰好增加两个小时,也可以使用更短的间隔文字:
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

10-08 08:55