Это моя первая публикация здесь. Я смотрел на все темы здесь & другие сайты, но все же я не могу исправить коды.Oracle current_timestamp для второго, включая миллисекунды
Здесь, у меня есть пример таблицы называется LM
Если структура выглядит следующим образом: (не может изменить структуру таблицы)
LM_REFID(PK) LM_DESC
----------------------------------
VARCHAR2(50) VARCHAR2(50)
И LM_REFID
является PRIMARY KEY
Итак, вот вещи, Я хочу создать триггер ДОБАВИТЬ, чтобы назначить значения метки времени в секундах, включая миллисекунды. Он должен быть подсчитан в секундах (с миллисекундами) с текущего времени до 1/1/1970 00:00:00 (время в db)
(Поскольку одновременная вставка будет нарушать ПК из-за того же значения секунд, Я хочу, чтобы значения миллисекунды так PK является уникальным)
спусковой выглядит следующим образом:
CREATE OR REPLACE TRIGGER LM_TRG
BEFORE INSERT ON LM
REFERENCING NEW AS NEW
FOR EACH ROW
BEGIN
:new.LM_REFID := (SYSDATE - TO_DATE('01/01/1970 00:00:00','MM-DD-YYYY HH24:MI:SS'))
* 24 * 60 * 60 ;
END;
/
Это приведет к значениям, возвращаемым в SECONDS
является 1449677554
Но я не хочу, чтобы СЕКУНД только, я хочу миллисекунды тоже, поэтому ПК уникальна. Итак, я попытался заменить функцию SYSDATE на отметку времени там:
:new.LM_REFID:= (CURRENT_TIMESTAMP - TO_TIMESTAMP ('01/01/1970 00:00:00',
'MM-DD-YYYY HH24:MI:SSFF3')) * 24 * 60 * 60 * 1000
Но это приводит к ошибке. Я также пробовал других, таких как CAST, EXTRACT
, эпоха и многое другое, но все равно не повезло.
Я хочу, чтобы выборочные данные, например, должны быть выглядел следующим образом:
LM_REFID
----------------------------
1449677554.123456
1449677554.123344
1444677554.124466
Любой человек может помочь улучшить курок? Спасибо.
Почему вы храните номер в столбце 'VARCHAR'? –
Это потому, что я не хочу, чтобы PK 'REF_ID' был изменен, всякий раз, когда данные обновляются. Если какие-либо данные с «REF_ID» будут обновлены, также изменится тип данных timestamp. Вы не можете изменить ПК? Особенно это касается многих таблиц. – Miraie