【问题标题】:Get ORA 01722 invalid number when try to copy data from one table to another尝试将数据从一个表复制到另一个表时得到 ORA 01722 无效数字
【发布时间】:2012-06-25 05:35:16
【问题描述】:

我必须管理两个表中的列之间存在细微差别。但我认为那是次要的。

表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 - “无效号码”

所以当我们说从具有相同架构的两个表中复制数据时,我们是在谈论 100% IDENTICAL 即使在 TYPE CONSTRAINT 上?

请帮忙。

更新

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

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    可能两个表中的列顺序不一样。

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

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

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

    【讨论】:

    • 哇,真快!它有效!这匹马必须有名字 XD
    • @Subarule:如果这真的解决了它,那么你刚刚学会了插入没有列列表的艰难方法,select * 是邪恶的!
    • 对,我忘了说列的顺序也不同。周末愉快!
    • @Subarule:但是输入这个问题所花费的时间比输入三列所花费的时间要长得多。此外:好的 SQL 客户端可以帮助你(通过自动完成又名“智能感知”)
    猜你喜欢
    • 2022-08-07
    • 1970-01-01
    • 1970-01-01
    • 2011-05-10
    • 2023-03-16
    • 2011-05-16
    • 2012-11-24
    • 2016-09-29
    相关资源
    最近更新 更多