Oracle 检查约束

Oracle check constraints

如何在 Oracle SQL 中创建 if 约​​束?

Create Table A(
b varchar(25) primary key,
c varchar(25),
constraint b_1
check(b='name' and c != 'notallowed')
);

以下应该工作:

Insert into A values('name','notallowed');

但这应该有效:

Insert into A values('notname','notallowed');

如何解决我的限制?

如果我没理解错的话,唯一不合法的组合是b='name' and c='notallowed'。如果这是正确的,您可以用 not 运算符表示:

CREATE TABLE a (
    b varchar(25) PRIMARY KEY,
    c varchar(25),
    CONSTRAINT b_1
    CHECK(NOT(b = 'name' AND c = 'notallowed'))
);

我猜你正在找这个

check ((b='name' and c != 'notallowed') or b != 'name')

另一种写法是:

create Table A
(
  b varchar(25) primary key,
  c varchar(25),
  constraint b_1 check ( (b,c) not in (('name', 'notallowed')) )
);

(是的,IN 列表周围的重复括号在 Oracle 中是必需的)