Разработчик sql предлагает «пропустить правую круглую скобку». но я не мог найти, где не так

Код выглядит следующим образом:

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

Привет и добро пожаловать в Stack Overflow :) В чем именно заключается ошибка? У вас есть сообщение или скриншот?

benichka 31.10.2018 12:12
1
1
36
1

Ответы 1

Я думаю, у вас есть две проблемы. Попробуй это:

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 оценивались как истинные или ложные.

Другие вопросы по теме