ORA-00907 при попытке создать ограничение CHECK - PullRequest
2 голосов
/ 28 мая 2011

Мне нужна ваша помощь с этой ошибкой:

ORA-00907 при проверке CONSTRAINT

Запрос:

CREATE TABLE S_NEWS.T_UTILISATEUR_USR ( 
  USR_ID                        INTEGER      NOT NULL  PRIMARY KEY,
  USR_MAIL                      VARCHAR(256) NOT NULL,
  USR_TITRE      CHAR(6)      NULL DEFAULT 'M.'CHECK (USR_TITRE IN ('M.' , 'Mlle.','Mme.' )),  
  USR_NOM                       CHAR(32)     NOT NULL,
  USR_PRENOM                    VARCHAR(32)  NULL,
  USR_ORGANISATION              VARCHAR(128) NULL
);

1 Ответ

5 голосов
/ 28 мая 2011

Сообщение об ошибке

ORA-00907: missing right parenthesis

Почти всегда указывает на синтаксическую ошибку, а не на отсутствующую скобку. В этом случае синтаксический анализатор возражает против порядка элементов в определении вашего столбца. В частности, предложение DEFAULT должно предшествовать предложению CONSTRAINT, которое включает в себя объявление NULL / NOT NULL. Так что попробуйте

USR_TITRE CHAR(6) DEFAULT 'M.'CHECK (USR_TITRE IN ('M.' , 'Mlle.','Mme.' )) NULL

Кстати, вы столкнетесь с проблемой с этим ограничением. Тип данных CHAR всегда дополняется до заявленной длины. Таким образом, если вы введете «М.» в столбец он будет падать на 'М. ', значение которого приведет к тому, что ограничение вызовет исключение. Я предлагаю вам использовать VARCHAR2 (6) вместо этого.

Объявления CHAR почти всегда являются ошибкой, просто ошибка, ожидающая появления.

...