【问题标题】:Not able to perform UPDATE query with sysdate - ORACLE无法使用 sysdate 执行 UPDATE 查询 - ORACLE
【发布时间】:2015-01-14 07:13:41
【问题描述】:

我正在尝试在 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 都应该不同,而且它永远不会遇到“违反唯一约束”错误。

【问题讨论】:

  • sysdate(作为DATE)仅精确到一秒。因此,如果您非常快速地运行多个语句,则不太可能两次获得相同的 sysdate 值。

标签: oracle sql-update unique-constraint sysdate


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多