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 中是必需的)
如何在 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 中是必需的)