约束检查 restrict null Oracle

Constraint check restrict null Oracle

CREATE TABLE CLIENT
  (
    id       NUMBER (5) NOT NULL ,
    name      VARCHAR2 (20) ,
    surname  VARCHAR2 (20) ,
    company    VARCHAR2 (20) ,
ALTER TABLE CLIENT ADD CONSTRAINT CLIENT_PK PRIMARY KEY ( id ) ;

如何制作姓名和姓氏不为空且相反时禁止进入公司的检查约束?

如果我没有正确理解您的要求,那么如下:

ALTER TABLE CLIENT ADD CONSTRAINT CLIENT_CK
check ( (company is null and name is not null and surname is not null)
        or (company is not null and name is null and surname is null) ) ;

例如在以下插入语句中,只有前两个会成功插入一行 - 其余的将因检查约束而失败:

insert into client (id, name, surname, company)
values (1, 'fred', 'bloggs', null);

insert into client (id, name, surname, company)
values (2, null, null, 'ACME');

insert into client (id, name, surname, company)
values (3, 'joe', null, null);

insert into client (id, name, surname, company)
values (4, null, 'smith', 'INC INC.');

insert into client (id, name, surname, company)
values (5, 'bob', 'jobs', 'CORP CORP.');