无法使用sysdate - ORACLE执行UPDATE查询

时间:2015-01-14 07:13:41

标签: oracle sql-update unique-constraint sysdate

我正在尝试在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组成。

表结构是

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

这很奇怪,因为每次运行时sysdate应该不同,它应该永远不会遇到“唯一约束违规”错误。

1 个答案:

答案 0 :(得分:3)

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