2014-12-19 104 views
0

假设一个名为Mytable的表,其中有两列C1和C2。 我想要这两列互斥。Oracle专栏互斥

我的意思是,如果我在这个表中的这一行的一列C1中输入值,db不应该允许C2中的条目,反之亦然。

在任何情况下,其中一列应该被允许有数据,而不是两者(两者都是NULL值除外)。

是否可以通过创建此表的触发器?

回答

0

我的意思是,如果我进入这行此表中的一列C1值,分贝不应该让在C2,反之亦然条目。 在任何情况下,其中一列应该被允许有数据,而不是两者(两者都是NULL值除外)。

这样的事情可能吗?

ALTER TABLE mytable 
ADD CONSTRAINT constraint_name CHECK ((c1 is null and c2 is null) or 
             (c1 is not null and c2 is null) or 
             (c1 is null and c2 is not null)) 

使用Karnaugh map或简单的逻辑,你可以重写为:

ALTER TABLE mytable 
ADD CONSTRAINT constraint_name CHECK (not (c1 is not null and c2 is not null)) 

这是事实显性化,唯一的无效组合是“同时具有C1和C2的值”

+0

谢谢Sylvain和Juergen,这有助于很多:) – user1583751 2014-12-19 09:52:11

2
ALTER TABLE mytable 
ADD CONSTRAINT constraint_name CHECK (c1 is null or c2 is null) 
+0

这样,它将允许我在两列中插入数据。我想只有其中一列的数据不是两个。就像C1有数据一样,C2决不允许插入/更新数据。如果C2有数据,则绝不允许C1插入/更新数据。如果两者都是NULL,那很好。 – user1583751 2014-12-19 09:39:08