为啥 Oracle 认为我缺少右括号?
Posted
技术标签:
【中文标题】为啥 Oracle 认为我缺少右括号?【英文标题】:Why does Oracle think I'm missing a right parenthesis?为什么 Oracle 认为我缺少右括号? 【发布时间】:2009-04-01 17:07:53 【问题描述】:在 Oracle 10i 中,我正在运行以下命令:
ALTER TABLE jnrvwchnglst ADD
( jnrvwchnglst_userid NUMBER(10) NOT NULL DEFAULT 1 )
是jnrvwchnglst
是现有表,没有jnrvwchnglst_userid
不是现有列。
Oracle 错误信息是:
ORA-00907: missing right parenthesis
这个查询有什么问题,为什么 Oracle 认为我缺少括号?
【问题讨论】:
这不是我的事,但是你用这样的名字在桌子上放什么?初中大众改名表? :) @Quassnoi - ORM 系统从标记中删除元音,因为 Oracle 有其(不合理的)30 个字符的最大值。所以真的是“JoinReviewChangelist”。 【参考方案1】:ALTER TABLE jnrvwchnglst ADD
( jnrvwchnglst_userid NUMBER(10) DEFAULT 1 NOT NULL )
【讨论】:
【参考方案2】:"(NOT) NULL" 在语法上必须是“ALTER”中的最后一条语句,所以当 Oracle 看到时 - 并且下一个字符(您的“DEFAULT”stmt)不是预期的终止权“) ",抛出错误。
【讨论】:
希望这能解释更多为什么你会得到这个错误,以帮助解决其他类似的情况。【参考方案3】:我之前遇到过这个问题,您无法在同一语句中添加列并设置默认/约束。 “缺少右括号”是一个红鲱鱼。 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 );
【讨论】:
该死 =) 或者它可能只是操作顺序问题。呸 =) 这是真的,例如时间戳。然而,Quassnoi 的代码确实有效。谢谢!以上是关于为啥 Oracle 认为我缺少右括号?的主要内容,如果未能解决你的问题,请参考以下文章