SQL开发人员建议“缺少右括号”。但是我找不到哪里出了问题

时间:2018-10-31 11:07:18

标签: sql oracle ddl

代码如下:

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));

1 个答案:

答案 0 :(得分:5)

我认为您有两个问题。试试这个:

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(),而不是固定长度的字符串。

另一个问题是NULL中的in

出了什么问题?在大多数SQL表达式中,NULL被视为“假”。例如,WHERE子句和CASE表达式中的条件就是这样。由于某些原因,CHECK约束的行为有所不同。 NULL值通过CHECK约束。我发现所有这些都令人困惑,因此我更愿意将CHECK约束评估为true或false。