尝试将数据从一个表复制到另一个表时,获取ORA 01722无效的数字

时间:2012-06-22 21:24:15

标签: sql oracle

我必须管理,两个表的列之间略有不同。但我认为那是次要的。

表Source有三个属性

Amount     NUMBER(10,2)
SHORTNAME  VARCHAR2(3)
NAME       VARCHAR2(40)

表Target具有相同的属性集,但对其类型的约束略有不同

Amount     NUMBER
SHORTNAME  VARCHAR2(255)
NAME       VARCHAR2(255)

我认为表Target应该对其容量有更大的容忍度,但是当我运行查询时

insert into DB_B.Target select * from DB_A.Source ;

不幸的是我得到了流行的01722错误:

  

SQL错误:ORA-01722:无效的数字 - 01722. 00000 - “无效的数字”

因此,当我们说从两个具有相同模式的表中复制数据时,即使在TYPE CONSTRAINT上,我们是否仍在讨论100%IDENTICAL?

请帮忙。

更新

在暴风雨袭击办公室之前,我不得不提到两张桌子上的列顺序不同。感谢@a_horse_with_no_name帮助我思考这个问题并给出完美的答案。

1 个答案:

答案 0 :(得分:2)

可能两列中列的顺序不相同。

尝试明确列出列,以确保它们不会由于某种原因而混淆:

insert into db_b.target 
    (amount, shortname, name) 
select amount, shortname, name 
from db_a.source;

请注意,列出insert子句中的列并以这种方式使用select *通常被认为是错误的样式(即使这不是问题的原因)