为什么Oracle认为我错过了一个正确的括号?

时间:2009-04-01 17:07:53

标签: sql oracle ora-00907

在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 个答案:

答案 0 :(得分:21)

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

答案 1 :(得分:4)

“(NOT)NULL”必须是语法中“ALTER”中的最后一个语句,所以当Oracle看到 - 并且下一个char(你的“DEFAULT”stmt)不是预期的终止权限时) “,扔错了。

答案 2 :(得分: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 );