用if逻辑oracle sql检查约束

时间:2013-05-01 14:40:06

标签: sql oracle constraints ddl

有没有办法使用oracle sql中的逻辑检查约束?

这是我的伪表:

create table child
(
    name,
    behaviour,
    treat,
);

现在我想要的是如果behaviour的孩子= 'bad'然后treat != 'lollies'

4 个答案:

答案 0 :(得分:3)

有时用NOT来表达不允许的内容更容易表达:

CHECK (NOT (behaviour = 'bad' AND treat = 'lollies'))

......意思是:

CHECK (behaviour != 'bad' OR treat != 'lollies')

很容易弄错,正如其他答案所显示的那样!

答案 1 :(得分:0)

试试这个

create table children ( 
        childname VARCHAR2(50), behaviour VARCHAR2(50),treats VARCHAR2(50),
        constraint behave_treat check (behaviour = 'bad' AND treats != 'lollies')
        ) 

答案 2 :(得分:0)

ALTER TABLE child 
  ADD CONSTRAINT bad_behaviour_CK 
    CHECK (NOT (behaviour = 'bad' AND treat = 'lollies')) ;

SQL-Fiddle

中播放

答案 3 :(得分:0)

如果您之前已经学过命题逻辑,我们可以在这种情况下应用它,并说明获得最高投票答案的方式。

我们以 A behavior = 'bad'的命题,而 B treat != 'lollies'的命题。语句“如果为behavior = 'bad',则为treat != 'lollies'”可以写为“ A B ”。

请注意,“ A B ”在逻辑上等同于“¬ A B ”(¬表示NOT,and表示OR)。因此,我们可以将语句“¬ A B ”转换回“ behavior != 'bad''treat != 'lollies'”。

就SQL而言,我们可以这样写:

CHECK (behaviour <> 'bad' OR treat <> 'lollies')

这等效于:

CHECK (NOT (behaviour = 'bad' AND treat = 'lollies'))