15

两个表在表名、列名、数据类型和大小方面是相同的。这些表位于不同的数据库中,但我习惯于当前登录 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:
4

5 回答 5

9

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

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'

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

于 2013-09-11T09:26:34.343 回答
6

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

于 2019-09-10T06:13:40.797 回答
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;
于 2013-09-11T09:40:33.687 回答
0

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

例如:

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

问候。

于 2014-05-04T08:49:40.820 回答
0

对我来说,这很完美

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

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

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

于 2013-09-11T10:15:54.270 回答