尝试创建CHECK约束时ORA-00907

时间:2011-05-28 17:12:56

标签: sql oracle oracle10g ora-00907

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

  

检查CONSTRAINT上的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
);

1 个答案:

答案 0 :(得分: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声明几乎总是一个错误,只是一个等待发生的错误。