2016-12-29 117 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