Почему Oracle думает, что мне не хватает правильной круглой скобки?

В 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 );