尝试创建CHECK约束时ORA-00907

Aub*_*bin 2 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
);
Run Code Online (Sandbox Code Playgroud)

APC*_*APC 5

错误消息是

ORA-00907: missing right parenthesis
Run Code Online (Sandbox Code Playgroud)

它几乎总是指向语法错误而不是缺少括号.在这种情况下,解析器反对列定义中元素的顺序.具体来说,DEFAULT子句必须位于CONSTRAINT子句之前,该子句包含NULL/NOT NULL声明.所以试试吧

USR_TITRE CHAR(6) DEFAULT 'M.'CHECK (USR_TITRE IN ('M.' , 'Mlle.','Mme.' )) NULL
Run Code Online (Sandbox Code Playgroud)

顺便说一下,你会遇到这个约束的问题.CHAR数据类型始终填充到声明的长度.因此,如果你输入'M.' 在列中它将填充到'M. ',哪个值将导致约束抛出异常.我建议你改用VARCHAR2(6).

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