代码之家  ›  专栏  ›  技术社区  ›  Jason Cohen

为什么Oracle认为我缺少一个右括号?

  •  11
  • Jason Cohen  · 技术社区  · 17 年前

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

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

    对 jnrvwchnglst 是一个现有表,没有 jnrvwchnglst_userid 不是现有列。

    ORA-00907: missing right parenthesis
    

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

    3 回复  |  直到 15 年前
        1
  •  21
  •   Quassnoi    17 年前
    ALTER TABLE jnrvwchnglst ADD
         ( jnrvwchnglst_userid NUMBER(10) DEFAULT 1  NOT NULL )
    
        2
  •  4
  •   galaxis    13 年前

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

        3
  •  0
  •   JasonRShaver    17 年前

    我以前遇到过这样的问题,即不能在同一语句中添加列和设置默认/约束。“缺少右括号”是一种误导。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 );