11

在 Oracle 10i 中,我正在运行以下命令:

ALTER TABLE jnrvwchnglst ADD
     ( jnrvwchnglst_userid NUMBER(10) NOT NULL DEFAULT 1 )

Yesjnrvwchnglst是现有表,nojnrvwchnglst_userid不是现有列。

Oracle 错误消息是:

ORA-00907: missing right parenthesis

这个查询有什么问题,为什么 Oracle 认为我缺少括号?

4

3 回答 3

21
ALTER TABLE jnrvwchnglst ADD
     ( jnrvwchnglst_userid NUMBER(10) DEFAULT 1  NOT NULL )
于 2009-04-01T17:09:41.887 回答
4

“(NOT)NULL”在语法上必须是“ALTER”中的最后一个语句,所以当Oracle看到 - 并且下一个字符(您的“DEFAULT” stmt)不是预期的终止权“)”时,抛出错误。

于 2013-10-11T16:46:01.227 回答
0

在您无法添加列并在同一语句中设置默认/约束之前,我遇到过这个问题。“缺少右括号”是一个红鲱鱼。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 );
于 2009-04-01T17:17:57.123 回答