SQL 错误:ORA-00913:值太多

Posted

技术标签:

【中文标题】SQL 错误:ORA-00913:值太多【英文标题】:SQL Error: ORA-00913: too many values 【发布时间】: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:

【问题讨论】:

【参考方案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 列表,那么您将遇到相同的异常消息。

问候。

【讨论】:

以上是关于SQL 错误:ORA-00913:值太多的主要内容,如果未能解决你的问题,请参考以下文章

PL/SQL: ORA-00913: 值太多

ORA-00913: oracle 子查询中的值太多

SQL、值过多、结果合并

ORA-00913: 使用大小写时值太多

ORA-00913: 值过多

PL/SQL 过程 - 值太多