从日期更改列以接受系统时间戳

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 字段不应用作唯一键。

祝你好运。