SQL错误:ORA-00913:值太多

时间:2013-09-11 09:25:30

标签: sql oracle

两个表在表名,列名,数据类型和大小方面完全相同。这些表位于不同的数据库中,但我习惯使用 current以hr user登录。

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:

5 个答案:

答案 0 :(得分:6)

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

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'

并且应该将表升级为具有相同的结构。

答案 1 :(得分:1)

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

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

或者从sqlplus执行

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

对我而言,这完美无缺

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

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

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

答案 4 :(得分:0)

这有点晚了..但是我已经看到当你想从/向数据库插入或删除一行但是你输入/拉出多行或多个值时会出现这个问题,

例如:

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

问候。