从日期更改列以接受systimestamp

时间:2015-08-13 10:10:42

标签: sql oracle alter systimestamp

目前我有一个用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? 如果您需要更多信息,请与我们联系。

1 个答案:

答案 0 :(得分:1)

@Boneist关于不使用时间值的评论作为关键点。但是,如果你完全受约束并决定这样做 - 是的,当然可以做到:

ALTER TABLE WHATEVER
  MODIFY (SOME_DATE_FIELD TIMESTAMP(6));

这会将数据类型更改为TIMESTAMP(6),精确到1 / 1,000,000秒。希望这将满足您的要求,但实际上 - 日期/时间字段永远不应该用作唯一键。

祝你好运。