Почему Oracle считает, что мне не хватает правильных скобок? - PullRequest
11 голосов
/ 01 апреля 2009

В 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 ]

21 голосов
/ 01 апреля 2009
ALTER TABLE jnrvwchnglst ADD
     ( jnrvwchnglst_userid NUMBER(10) DEFAULT 1  NOT NULL )
4 голосов
/ 11 октября 2013

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

0 голосов
/ 01 апреля 2009

Раньше у меня была эта проблема, когда вы не можете добавить столбец И установить значения по умолчанию / ограничения в том же операторе. «Отсутствующая правая скобка» - это красная сельдь. 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 );
...