我正在尝试对我的数据库中的几个列创建一个检查,强制它们为null,除非另一列的值为yes。我尝试过像
这样的东西ALTER TABLE TABLE1
ALTER Column1
CHECK (Column2 = 'y')
但这似乎不起作用。有没有办法像这样做,还是有更好的方法解决这个问题?任何正确方向的帮助都会很棒。
答案 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;
它可能有一些语法错误..请检查并更正它.. 我现在的机器上没有数据库..