2016-12-29 6 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'))) 
); 

(Да, дублирующие круглые скобки вокруг списка IN требуются в Oracle)

+0

Ver y элегантный! +1! – Mureinik