目前,我有一个用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的方法?如果你需要更多的信息,请告诉我。
发布于 2015-08-13 12:10:36
@Boneist关于不使用时间值作为键的评论是值得注意的。但是,如果你有绝对的决心去做这件事-是的,当然,这是可以做到的:
ALTER TABLE WHATEVER
MODIFY (SOME_DATE_FIELD TIMESTAMP(6));这将数据类型更改为时间戳(6),精确到每秒1/1,000,000,000。希望这将满足您的要求,但真正的日期/时间字段不应该被用作唯一的键。
祝你好运。
https://stackoverflow.com/questions/31985306
复制相似问题