代码如下:
create table Person (
personId smallint not null,
title char(5) default null,
personName varchar2(50) not null,
institution varchar2(100),
country varchar2(30),
phoneNo varchar2(15),
personEmail varchar2(50),
primary key (personId),
check (title in ('Mr', 'Ms', 'Miss', 'Dr', 'Prof', null)),
check ( length(phoneNo) between ( 8 and 15)),
unique (personEmail));
我认为您有两个问题。试试这个:
create table Person (
personId smallint not null,
title char(5) default null,
personName varchar2(50) not null,
institution varchar2(100),
country varchar2(30),
phoneNo varchar2(15),
personEmail varchar2(50),
primary key (personId),
check (title in ('Mr', 'Ms', 'Miss', 'Dr', 'Prof') or title is null),
check (length(phoneNo) between 8 and 15),
unique (personEmail)
);
语法错误是(8 and 15)
周围的括号。我建议标题是varchar2()
,而不是固定长度的字符串。
另一个问题是in
中的NULL
。
问题出在哪里?在大多数SQL表达式中,NULL
被视为"false"。例如,WHERE
子句和CASE
表达式中的条件也是如此。出于某种原因,CHECK
约束的行为有所不同。NULL
值通过CHECK
约束。我发现所有这些都令人困惑,所以我更喜欢我的CHECK
约束评估为true或false。