目前我有一个用sysdate
更新日期字段的触发器,不幸的是,如果在同一秒内发生更新,这有时可能不是唯一的。是否可以更改列以使用systimestamp
,以便使用毫秒并且始终是唯一的。
triger看起来像这样:
BEGIN
IF INSERTING or :old.STATUS_FLAG <> :new.STATUS_FLAG THEN
INSERT INTO T_SCHEME_STATUS_HISTORY
(SCHEME_ID, STATUS_FLAG, DATE_STATUS_CHANGED, AUDIT_CREDENTIALS, AUDIT_DTM)
VALUES
(:new.SCHEME_ID, :new.STATUS_FLAG, sysdate, :new.AUDIT_CREDENTIALS, SYSDATE);
END IF;
END;
我想将DATE_STATUS CHANGED
更改为使用systimestamp
,因此它始终是unqiue,但它正在更新的列是DATE(7)
类型,因此它不适合。
有没有办法改变表格以接受systimestamp
?
如果您需要更多信息,请与我们联系。
答案 0 :(得分:1)
@Boneist关于不使用时间值的评论作为关键点。但是,如果你完全受约束并决定这样做 - 是的,当然可以做到:
ALTER TABLE WHATEVER
MODIFY (SOME_DATE_FIELD TIMESTAMP(6));
这会将数据类型更改为TIMESTAMP(6),精确到1 / 1,000,000秒。希望这将满足您的要求,但实际上 - 日期/时间字段永远不应该用作唯一键。
祝你好运。