3

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

这是我的伪表:

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

现在我想要的是,如果behaviour孩子= 'bad'那么treat != 'lollies'

4

4 回答 4

4

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

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

...这意味着相同:

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

正如其他答案所示,这很容易出错!

于 2013-05-01T15:12:35.910 回答
0
ALTER TABLE child 
  ADD CONSTRAINT bad_behaviour_CK 
    CHECK (NOT (behaviour = 'bad' AND treat = 'lollies')) ;

SQL-Fiddle中测试

于 2013-05-01T15:11:03.870 回答
0

如果你之前学过命题逻辑,我们可以将它应用在这种情况下,并解释最高票数的答案是如何得出的。

我们让A是 的命题,behavior = 'bad'B的命题treat != 'lollies'。“If behavior = 'bad', then treat != 'lollies'”的陈述可以写成“ AB ”。

请注意,“ AB ”在逻辑上等价于“¬ AB ”(¬ 表示 NOT,∨ 表示 OR)。因此,我们可以将语句“¬ AB ”翻译回“ behavior != 'bad'OR 'treat != 'lollies'”。

在 SQL 方面,我们可以这样写:

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

这相当于:

CHECK (NOT (behaviour = 'bad' AND treat = 'lollies'))
于 2020-10-23T11:40:10.930 回答
-1

尝试这个

create table children ( 
        childname VARCHAR2(50), behaviour VARCHAR2(50),treats VARCHAR2(50),
        constraint behave_treat check (behaviour = 'bad' AND treats != 'lollies')
        ) 
于 2013-05-01T15:05:10.423 回答