这是我第一次在这里发帖。我一直在寻找这里的所有主题&其他网站,但我仍然无法修复这些代码。
在这里,我有一个名为http://localhost/#access_token=ACCESS-TOKEN
的示例表,其结构如下所示:(不能更改表结构)
LM
而LM_REFID(PK) LM_DESC
----------------------------------
VARCHAR2(50) VARCHAR2(50)
是LM_REFID
所以,在这里,我想创建一个BEFORE INSERT触发器,以秒为单位分配时间戳值,包括毫秒。必须以秒为单位(以毫秒为单位)从当前时间到1/1/1970 00:00:00(db时间)进行计数
(考虑到同时插入会因相同的秒值而违反PK。因此,我想要毫秒值,因此PK是唯一的)
触发器如下所示:
PRIMARY KEY
这会导致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
但我不想要SECONDS,我也想要毫秒,所以PK是独一无二的。所以,我尝试用时间戳替换SYSDATE函数,如:
1449677554
但它会导致错误。我也尝试了其他像:new.LM_REFID:= (CURRENT_TIMESTAMP - TO_TIMESTAMP ('01/01/1970 00:00:00',
'MM-DD-YYYY HH24:MI:SSFF3')) * 24 * 60 * 60 * 1000
,epoch等等,但仍然没有运气。
我希望示例数据应该如下所示:
CAST, EXTRACT
任何人都可以帮助改善触发器? 谢谢。
答案 0 :(得分:1)
也许是这样的:
declare
l_interval interval day(9) to second(6);
l_seconds number(24,6);
begin
l_interval := current_timestamp - timestamp '1970-01-01 00:00:00.000000';
l_seconds := extract(day from l_interval) * 24 * 60 * 60 +
extract(hour from l_interval) * 60 * 60 +
extract(minute from l_interval) * 60 +
extract(second from l_interval);
dbms_output.put_line(l_seconds);
end;
/
l_seconds
也将包含小数秒,这就是为什么必须将其声明为带有小数位数的number
。
但我从来没有超过三位小数 - 不知道为什么。