无法使用 sysdate 执行更新查询 - ORACLE

Not able to perform UPDATE query with sysdate - ORACLE

我正在尝试 运行 以下相当简单的 ORACLE 更新语句。

UPDATE PROJECT_BUG_SNAPSHOTS
SET   SNAPSHOT_DATESTAMP = sysdate, 
      SNAPSHOT_TYPE      = P_SNAPSHOT_TYPE
      WHERE  PROJECT_ID  = P_PROJECT_ID
      AND    BUG_NO      = P_BUG_NO
      AND    BUG_STATUS  = P_BUG_STATUS;

它抱怨违反唯一约束。

PK包含PROJECT_ID,BUG_NO,SNAPSHOT_DATESTAMP,SNAPSHOT_TYPE.

table结构是

PROJECT_ID          NUMBER
SNAPSHOT_DATESTAMP  DATE
SNAPSHOT_TYPE       VARCHAR2(20 BYTE)
BUG_NO              NUMBER
BUG_STATUS          VARCHAR2(100 BYTE)

这很奇怪,因为每个 运行 的 sysdate 应该不同,而且它永远不会遇到 "unique constraint violation" 错误。

主键是PROJECT_IDBUG_NOSNAPSHOT_DATESTAMPSNAPSHOT_TYPE的组合。这意味着您允许(并且可能有!)多行具有相同的项目 ID、错误编号和快照类型,但来自不同的日期。您的 update 语句将尝试将给定项目的所有快照日期、错误编号和状态设置为同一日期(当前日期),从而破坏唯一性并因违反约束而失败。