2016-12-29 120 views
2

如何在Oracle SQL中制定约束?Oracle检查约束

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'); 

如何解决我的约束?

回答

1

我猜你正在寻找这个

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

如果我理解正确,唯一的非法组合是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')) 
); 
2

写这个的另一种方法是:

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

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

+0

Ver优雅! +1! – Mureinik