В Oracle 10i я запускаю следующую команду:
ALTER TABLE jnrvwchnglst ADD
( jnrvwchnglst_userid NUMBER(10) NOT NULL DEFAULT 1 )
Да jnrvwchnglst
- это существующая таблица, а jnrvwchnglst_userid
не является существующим столбцом.
Сообщение об ошибке Oracle:
ORA-00907: missing right parenthesis
Что не так с этим запросом и почему Oracle думает, что мне не хватает скобок?
Ответ 1
ALTER TABLE jnrvwchnglst ADD
( jnrvwchnglst_userid NUMBER(10) DEFAULT 1 NOT NULL )
Ответ 2
"(NOT) NULL" должен быть последним оператором в "ALTER" синтаксически, когда он присутствует, поэтому, когда Oracle увидела это, и что следующий char (ваш "DEFAULT" stmt) не был ожидаемым конечным правом ")", выбросил ошибку.
Ответ 3
У меня была эта проблема до того, где вы не можете добавить столбец И установить значения по умолчанию/ограничения в том же самом выражении. "Отсутствие правильной круглой скобки" - это красная селедка. Oracle любит использовать эту ошибку для случаев, которые не связаны с круглыми скобками (я предполагаю, что их логика разбора доходит до 00907).
Try
ALTER TABLE jnrvwchnglst ADD ( nrvwchnglst_userid NUMBER(10) );
ALTER TABLE jnrvwchnglst ALTER ( nrvwchnglst_userid SET DEFAULT 1 );
UPDATE jnrvwchnglst SET nrvwchnglst_userid = 1 WHERE nrvwchnglst_userid IS NULL;
ALTER TABLE jnrvwchnglst ALTER ( nrvwchnglst_userid SET NOT NULL );