2

我需要你的帮助来解决这个错误:

关于检查约束的 ORA-00907

询问:

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

1 回答 1

5

错误信息是

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 数据类型始终填充到声明的长度。因此,如果您输入“M”。进入列,它将填充到'M。',哪个值将导致约束抛出异常。我建议您改用 VARCHAR2(6)。

CHAR 声明几乎总是一个错误,只是一个等待发生的错误。

于 2011-05-28T17:27:28.137 回答