【问题标题】:SQL Error: ORA-00913: too many valuesSQL 错误:ORA-00913:值太多
【发布时间】:2013-09-11 09:25:29
【问题描述】:

两个表在表名、列名、数据类型和大小方面是相同的。这些表位于不同的数据库中,但我习惯于 当前登录 hr 用户。

insert into abc.employees select * from employees where employee_id=100; 

我无法使用公司办公室的原始查询。

Error starting at line 1 in command:
insert into abc.employees select * from employees where employee_id=100; 

Error at Command Line:1 Column:25
Error report:
SQL Error: ORA-00913: too many values
00913. 00000 -  "too many values"
*Cause:    
*Action:

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    您应该如下指定列名。这是一个很好的做法,可能会解决您的问题

    insert into abc.employees (col1,col2) 
    select col1,col2 from employees where employee_id=100; 
    

    编辑

    正如你所说,employees 有 112 列(原文如此!)尝试在 select 下面运行以比较两个表的列

    select * 
    from ALL_TAB_COLUMNS ATC1
    left join ALL_TAB_COLUMNS ATC2 on ATC1.COLUMN_NAME = ATC1.COLUMN_NAME 
                                   and  ATC1.owner = UPPER('2nd owner')
    where ATC1.owner = UPPER('abc')
    and ATC2.COLUMN_NAME is null
    AND ATC1.TABLE_NAME = 'employees'
    

    你应该升级你的表以具有相同的结构。

    【讨论】:

    • 不可能,因为原始表有 112 列,并且可以在 800+ 大表上工作,所以......
    • employees 表有 112 列!?
    • @user2703444 我忘记了AND ATC1.TABLE_NAME = 'employees' 条件:),请立即尝试
    • 通常,Oracle 对象/模式名称是大写的(除非在创建时明确引用),所以我猜这应该是 "ATC1.owner = 'ABC'" / "ATC1.TABLE_NAME = 'EMPLOYEES '"。
    • @FrankSchmitt 对!我添加了upper 函数
    【解决方案2】:

    00947 消息表明您尝试发送到 Oracle 的记录缺少创建表时包含的一个或多个列。 00913 消息表明您尝试发送到 Oracle 的记录包含的列多于创建表时包含的列。 您只需要检查两个表中的列数及其类型 即sql中涉及的表。

    【讨论】:

      【解决方案3】:

      如果您在一个表中有 112 列,并且您想从源表中插入数据,您可以这样做

      create table employees as select * from source_employees where employee_id=100;
      

      或者从 sqlplus 做 as

      copy from source_schema/password insert employees using select * from 
      source_employees where employee_id=100;
      

      【讨论】:

      • 它会创建只有一行的表格,如果你想复制到同一个表格旁边,你会怎么做?
      • @Parado 什么行满足条件将被复制到目标表。
      • 但是如果 OP 想要每天、每周复制数据?
      • @Parado OP 在哪里指定他每周都会复制数据?
      • @Parado 不确定您到底指的是什么。 OP 必须决定他想做什么。
      【解决方案4】:

      对我来说这很完美

      insert into oehr.employees select * from employees where employee_id=99
      

      我不确定你为什么会出错。您生成的错误代码的性质是列不匹配。

      一种好方法是使用@Parodo 指定的答案

      【讨论】:

        【解决方案5】:

        这有点晚了.. 但是我已经看到当您想从/向 DB 插入或删除一行但您放置/拉出多于一行或多个值时会出现此问题,

        例如:

        您想从数据库中删除具有特定值(例如项目的 id)的一行,但您查询了一个 id 列表,那么您将遇到相同的异常消息。

        问候。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-07-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多