两个表在表名,列名,数据类型和大小方面完全相同。这些表位于不同的数据库中,但我习惯使用 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:
答案 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列表,那么您将遇到相同的异常消息。
问候。