【问题标题】:Error SQL: ORA-00907: "missing right parenthesis"错误 SQL:ORA-00907:“缺少右括号”
【发布时间】:2017-10-30 09:03:55
【问题描述】:

我有TABLE_A (user, book, msdin); 和TABLE_B (car_id, user, book, msdin);

我正在尝试做这个插入

INSERT INTO TABLE_B (car_id, user, book, msdin)
values 
(11, (select user, book, msdin from TABLE_A));

但是我得到了这个错误:ORA-00907: "missing right parenthesis",但是右/左括号的数量是一样的

【问题讨论】:

  • 11 的值是多少?
  • 您想插入 4 列,但指定 1 + 4 个值。
  • 您插入的值超过 4 个
  • INSERT INTO TABLE_B (car_id, user, book, msdin) select 11, ... from TABLE_A; 但是,您可能会在这里得到一个主键重复(如果选择返回多行。)
  • 出现错误。已编辑

标签: sql oracle oracle11g oracle12c


【解决方案1】:

您可能需要INSERT SELECT 语句

INSERT INTO TABLE_B (car_id, user, book, msdin)
select 11, user, book, msdin from TABLE_A;

SELECT 返回的值的数量及其数据类型必须与INSERT 后面的表的属性相对应。尝试在INSERT 中使用VALUES 后面的子选择是不可能的。

【讨论】:

    【解决方案2】:

    插入中的列数与值字段中的列数不匹配。 试试这个..

    INSERT INTO TABLE_B (car_id, user, book, msdin)
    select 11, user, book, msdin from TABLE_A ;
    

    【讨论】:

    • TABLE_A 没有 car_id 列 - 这应该是数字文字 11
    【解决方案3】:

    如果您的 TABLE_A 只有 1 条记录,那么您需要执行以下操作 -

    INSERT INTO TABLE_B (car_id, user, book, msdin)
    values 
        (11, 
         (select  user from TABLE_A),
         (select book from TABLE_A),
         (select msdin from TABLE_A),
    );
    

    【讨论】:

    • @Dear Downvoters - 如果您也可以添加评论,那就太好了。据我所知,上述答案肯定会奏效。
    • 如果您的 TABLE_A 只有 1 条记录,这就是我在答案中的第一行所说的。
    猜你喜欢
    • 1970-01-01
    • 2015-04-25
    • 2016-10-23
    • 2015-03-31
    • 1970-01-01
    • 2013-05-12
    • 2014-03-25
    • 1970-01-01
    相关资源
    最近更新 更多