1

目前我有一个用 更新日期字段的触发器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,所以它总是 unqiue 但它正在更新的列是类型DATE(7),所以它不适合。

有没有办法改变桌子接受systimestamp?如果您需要更多信息,请告诉我。

4

1 回答 1

1

@Boneist 关于不使用时间值作为键的评论是正确的。但是,如果您绝对有义务并决心这样做 - 是的,当然,可以这样做:

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

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

祝你好运。

于 2015-08-13T12:10:36.267 回答