Почему 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 считает, что мне не хватает скобок?

3 ответа

Решение
ALTER TABLE jnrvwchnglst ADD
     ( jnrvwchnglst_userid NUMBER(10) DEFAULT 1  NOT NULL )

"(NOT) NULL" должен быть последним оператором в синтаксисе "ALTER", когда он присутствует, поэтому, когда Oracle увидел это - и что следующий символ (ваше "DEFAULT" stmt) не был ожидаемым завершающим правом ")", бросил Ошибка.

У меня была эта проблема раньше, когда вы не можете добавить столбец И установить значения по умолчанию / ограничения в том же заявлении. "Отсутствующая правая скобка" - это красная сельдь. Oracle любит использовать эту ошибку для случаев, не связанных с круглыми скобками (я предполагаю, что их логика синтаксического анализа проваливается до 00907).

Пытаться

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 );
Другие вопросы по тегам