我不确定如何表达这一点,但这里有...... 我们有一个如下表格结构:
Id | Timestamp | Type | Clientid | ..others..
001 | 1234567890 | TYPE1 | CL1234567 |.....
002 | 1234561890 | TYPE1 | CL1234567 |.....
现在对于上面给出的数据......我希望有一个约束,以便这两行不能一起存在。基本上,我希望表格
Unique for (Type, ClientId, CEIL(Timestamp/10000)*10000)
我不希望将在彼此的X时间内创建的相同数据的行添加到数据库中,即在这种情况下需要约束违规。问题是,上述约束不是我实际可以创建的。
在你问之前,我知道,我知道......为什么对?我知道某种情况不应该发生,但唉。我现在需要一种止损措施,所以我可以花一些时间来调查实际问题。如果您需要其他信息,请告诉我......
答案 0 :(得分: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.
应该做你想做的事。
答案 1 :(得分:1)
AFAIK,Oracle不支持像SQL Server那样的计算列。您可以使用触发器模拟计算列的功能。
以下是此
的步骤CEILCalculation
的列。
CEILCalculation
CEIL(Timestamp/10000)*10000
(Unique for (Type, ClientId, CEILCalculation)
如果您不想修改表格结构,可以在表格上放置BEFORE INSERT TRIGGER
并检查其中的有效性。
http://www.techonthenet.com/oracle/triggers/before_insert.php