从日期更改列以接受系统时间戳
Alter Column from a date to accept systimestamp
目前我有一个触发器用 sysdate
更新日期字段,不幸的是,如果在同一秒内发生更新,这有时可能不是唯一的。是否可以更改列以使用 systimestamp
以便它使用毫秒并且始终是唯一的。
触发器看起来像这样:
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
,因此它始终是唯一的,但它正在更新的列的类型是 DATE(7)
,所以它不适合。
有没有办法改变 table 以接受 systimestamp
?
如果您需要更多信息,请告诉我。
@Boneist 关于不使用时间值作为键的评论是正确的。但是,如果您绝对有义务并决心这样做 - 是的,当然可以做到:
ALTER TABLE WHATEVER
MODIFY (SOME_DATE_FIELD TIMESTAMP(6));
这会将数据类型更改为 TIMESTAMP(6),精确到 1/1,000,000 秒。希望这会满足您的要求,但实际上 - date/time 字段不应用作唯一键。
祝你好运。
目前我有一个触发器用 sysdate
更新日期字段,不幸的是,如果在同一秒内发生更新,这有时可能不是唯一的。是否可以更改列以使用 systimestamp
以便它使用毫秒并且始终是唯一的。
触发器看起来像这样:
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
,因此它始终是唯一的,但它正在更新的列的类型是 DATE(7)
,所以它不适合。
有没有办法改变 table 以接受 systimestamp
?
如果您需要更多信息,请告诉我。
@Boneist 关于不使用时间值作为键的评论是正确的。但是,如果您绝对有义务并决心这样做 - 是的,当然可以做到:
ALTER TABLE WHATEVER
MODIFY (SOME_DATE_FIELD TIMESTAMP(6));
这会将数据类型更改为 TIMESTAMP(6),精确到 1/1,000,000 秒。希望这会满足您的要求,但实际上 - date/time 字段不应用作唯一键。
祝你好运。