有没有办法在 oracle sql 检查约束中使用 if 逻辑?
这是我的伪表:
create table child
(
name,
behaviour,
treat,
);
现在我想要的是,如果behaviour
孩子= 'bad'
那么treat != 'lollies'
。
有没有办法在 oracle sql 检查约束中使用 if 逻辑?
这是我的伪表:
create table child
(
name,
behaviour,
treat,
);
现在我想要的是,如果behaviour
孩子= 'bad'
那么treat != 'lollies'
。
有时使用 NOT 来定义不允许的内容更容易表达:
CHECK (NOT (behaviour = 'bad' AND treat = 'lollies'))
...这意味着相同:
CHECK (behaviour != 'bad' OR treat != 'lollies')
正如其他答案所示,这很容易出错!
ALTER TABLE child
ADD CONSTRAINT bad_behaviour_CK
CHECK (NOT (behaviour = 'bad' AND treat = 'lollies')) ;
如果你之前学过命题逻辑,我们可以将它应用在这种情况下,并解释最高票数的答案是如何得出的。
我们让A是 的命题,behavior = 'bad'
B是的命题treat != 'lollies'
。“If behavior = 'bad'
, then treat != 'lollies'
”的陈述可以写成“ A → B ”。
请注意,“ A → B ”在逻辑上等价于“¬ A ∨ B ”(¬ 表示 NOT,∨ 表示 OR)。因此,我们可以将语句“¬ A ∨ B ”翻译回“ behavior != 'bad'
OR 'treat != 'lollies'
”。
在 SQL 方面,我们可以这样写:
CHECK (behaviour <> 'bad' OR treat <> 'lollies')
这相当于:
CHECK (NOT (behaviour = 'bad' AND treat = 'lollies'))
尝试这个
create table children (
childname VARCHAR2(50), behaviour VARCHAR2(50),treats VARCHAR2(50),
constraint behave_treat check (behaviour = 'bad' AND treats != 'lollies')
)