oracle SQL错误:ORA-00913:的值过多

tnkciper  于 2023-10-16  发布在  Oracle
关注(0)|答案(6)|浏览(355)

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

6qfn3psc1#

您应该指定列名称如下。这是很好的练习,可能会解决你的问题

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

编辑

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

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'

然后你应该升级你的表,使其具有相同的结构。

xyhw6mcr

xyhw6mcr2#

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

enyaitl3

enyaitl33#

如果您在一个表中有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;
muk1a3rh

muk1a3rh4#

对我来说,这是完美的工作

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

我不知道你为什么会出错。您产生的错误代码的性质是列不匹配。
一个很好的方法是使用@Parodo指定的答案

0sgqnhkj

0sgqnhkj5#

有点晚了。但我看到这个问题发生时,你想插入或删除一行从/到数据库,但你把/拉多行或多个值,
例如:
你想从数据库中删除一行,其中包含一个特定的值,比如一个项目的id,但是你已经查询了一个id列表,那么你会遇到同样的异常消息。
你好。

krcsximq

krcsximq6#

在我的例子中,insert语句缺少一列,所以在select中,我有一个额外的值。在insert语句中添加缺少的列为我修复了错误。
希望它能帮助到某人。

相关问题