根据另一列的值在多个列上创建约束

时间:2012-03-29 03:49:15

标签: sql oracle

我正在尝试对我的数据库中的几个列创建一个检查,强制它们为null,除非另一列的值为yes。我尝试过像

这样的东西
ALTER TABLE TABLE1
ALTER Column1
CHECK (Column2 = 'y')

但这似乎不起作用。有没有办法像这样做,还是有更好的方法解决这个问题?任何正确方向的帮助都会很棒。

2 个答案:

答案 0 :(得分:5)

如果您要求col1为空,除非col2为'y',您可以将CHECK约束写为:

col2 = 'y' OR col1 IS NULL

如果您还想要col1为'y'时col2必须有值,您可以将约束写为:

(col2 = 'y' AND col1 IS NOT NULL) OR (col2 != 'y' AND col1 IS NULL)

你应该把它写成表约束,顺便说一句。我不认为允许列约束引用其他列。 (但是列约束只是编写表约束的另一种方式,所以你不要通过编写表约束来丢失任何东西。)

答案 1 :(得分:0)

有很多选择......

但检查通常用于检查行..如果条件不满意则此行将被数据库忽略...

你可以尝试触发...

CREATE OR REPLACE TRIGGER trg_table1_col2
   before INSERT ON table1
   DECLARE
     duplicate_info EXCEPTION;
   BEGIN
     if :new.coloumn2 <>'y'
then :new.column1 := null;
end if;     
   END trg_table1_col2; 

它可能有一些语法错误..请检查并更正它.. 我现在的机器上没有数据库..