Oracle
 sql >> Database >  >> RDS >> Oracle

ORA-00907 quando si tenta di creare un vincolo CHECK

Il messaggio di errore è

ORA-00907: missing right parenthesis

Indica quasi sempre un errore di sintassi piuttosto che una parentesi mancante. In questo caso il parser si oppone all'ordine degli elementi nella definizione della colonna. In particolare, la clausola DEFAULT deve precedere la clausola CONSTRAINT, che include la dichiarazione NULL/NOT NULL. Quindi prova

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

Per inciso, avrai un problema con quel vincolo. Un tipo di dati CHAR viene sempre riempito alla lunghezza dichiarata. Quindi, se inserisci 'M.' nella colonna andrà a 'M. ', il quale valore farà sì che il vincolo generi un'eccezione. Ti suggerisco di usare invece VARCHAR2(6).

Le dichiarazioni CHAR sono quasi sempre un errore, solo un bug in attesa di verificarsi.