2015-05-11 3 views
1

У меня есть триггер, который должен установить временную метку в текущее время плюс два часа, когда поле имеет значение null перед вставкой. Одно из утверждений, которые я пытался до сих порДобавить два часа в timestamp

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, чтобы соответствовать значению вы фактически проходящее:

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 
3

Alther interval действительно может быть удобным, я часто пишу это как:

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

Добавление целого числа в дату обрабатывается как количество дней. «2/24» - два часа.

Смежные вопросы