2

I need your help with this error:

ORA-00907 on Check CONSTRAINT

Query:

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

ほとんどの場合、ブラケットの欠落ではなく、構文エラーを示しています。この場合、パーサーは列定義の要素の順序に反対しています。具体的には、NULL/NOT NULL 宣言を含む CONSTRAINT 句の前に DEFAULT 句を指定する必要があります。だから試してみてください

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 に答える