2016-12-29 1 views
2

Comment faites-vous si des contraintes dans Oracle SQL?Contraintes de vérification Oracle

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

Les points suivants doivent pas travail:

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

Mais cette devrait travail:

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

Comment puis-je corriger ma contrainte?

Répondre

1

Je suppose que vous êtes à la recherche de cette

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

Si je comprends bien, la seule combinaison illégale est b='name' and c='notallowed'. Si cela est correct, vous pouvez exprimer cela avec l'opérateur not:

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

Une autre façon d'écrire ceci est:

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

(Oui, les parenthèses dupliquées autour de la liste IN sont requises dans Oracle)

+0

y élégant! +1! – Mureinik