【问题标题】:How to create unique index only for records with today's date?如何仅为今天日期的记录创建唯一索引?
【发布时间】:2019-07-20 21:24:38
【问题描述】:

我想为 oracle 中的每日队列号添加唯一约束。İ 有如下数据;

   DATE       QUEUE
21.07.2019      1 
21.07.2019      2 
22.07.2019      1 
22.07.2019      2 
22.07.2019      3 

假设今天:21.07.2019 我可以添加像 QUEUE = 3 这样的记录 如果今天:22.07.2019 我无法添加 QUEUE = 3

我试过这个:

create unique index hbs_unique_sira on HASTA_BIRIM_SEVK
(case when 
SEVK_TARIHI > TRUNC(SYSDATE) AND SEVK_TARIHI < SYSDATE  
THEN randevu_sira_id 
ELSE null 
END)

但我遇到了类似的错误:ORA-01743: only pure functions can be indexed

【问题讨论】:

  • 为什么要检查“今天”?换句话说,你为什么不能简单地声明这对(date, queue) 是唯一的?不管date 是今天还是昨天,或者不是……

标签: sql oracle unique-index


【解决方案1】:

你正在寻找一个复合UNIQUE INDEX

create unique index hbs_unique_sira on t
(  TRUNC(dt),
   queue
);

如果您希望默认将SYSDATE 存储在日期字段中,您可以避免在create index 语句中使用SYSDATE。

CREATE TABLE t2(
   dt     DATE  DEFAULT TRUNC(SYSDATE)
  ,QUEUE INTEGER  
);

create unique index hbs_unique_sira2 on t2
(  dt,
   queue
);

这两种方法都达到了预期的效果,即每天一个队列不能超过一个条目。

这是一个 Dbfiddle Demo

【讨论】:

    猜你喜欢
    • 2016-10-22
    • 1970-01-01
    • 2019-01-22
    • 2016-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多