在列的计算值上添加唯一约束

Jav*_*ker 4 sql database oracle

我不确定如何表达这个,但是这里......我们有一个如下表结构:

Id   |   Timestamp    | Type  | Clientid   | ..others..
001  |   1234567890   | TYPE1 | CL1234567  |.....    
002  |   1234561890   | TYPE1 | CL1234567  |.....    
Run Code Online (Sandbox Code Playgroud)

现在对于上面给出的数据...我想有一个约束,以便这两行不能一起存在.基本上,我希望桌子是

Unique for (Type, ClientId, CEIL(Timestamp/10000)*10000)
Run Code Online (Sandbox Code Playgroud)

我不希望将在彼此的X时间内创建的相同数据的行添加到db中,即在这种情况下想要约束违规.问题是,上述约束不是我实际可以创建的.

在你问之前,我知道,我知道......为什么呢?我知道某种情况不应该发生,但唉.我现在需要一种止损措施,所以我可以花一些时间来调查实际问题.如果您需要其他信息,请告诉我......

dpb*_*ley 9

是的,Oracle支持计算列:

SQL> alter table test add calc_column as (trunc(timestamp/10000));

Table altered.

SQL> alter table test
     add constraint test_uniq
     unique (type, clientid, calc_column);

Table altered.
Run Code Online (Sandbox Code Playgroud)

应该做你想做的事.