ora 01858在同一数据库中插入具有相同模式的其他表中的数据时

时间:2014-12-31 14:22:07

标签: database oracle plsql bulkinsert sql-insert

我是一名应用程序员,但目前我需要复制大量数据,这些数据在1个月内收集,从一个数据库中的表中提取大约653 GB的数据到其他数据库中的类似表(都是oracle 11G)。每行大小约为150个字节。因此行数约为4000万。我不是在开玩笑。

我必须这样做。保存此数据的表(源表)基于日期列进行分区。因此,每个月的每一天都有一个分区,因此12月份共有31个分区。

目标数据库根据月份进行分区。因此目标数据库中有一个分区可以完成12月份。

我已经选择通过db链接复制数据,并且在dba的帮助下,我在这两个数据库之间创建了一个db链接。

我在目标数据库中有一个存储过程,它接受输入参数为(date,tablename)。此过程的作用是在目标数据库中创建一个临时表,其名称为tablename,并将给定日期的源数据库中的所有数据复制到目标数据库中的此临时表中。我成功完成了2-3天。现在我想将临时表中的这些数据插入到同一目标数据库中的实际表中。为此,我执行了以下查询:

insert into schemaname.target_table select * from schemaname.temp_table;

但我正在接受ORA错误。

ORA-01858: a non-numeric character was found where a numeric was expected

两个表都具有完全相同的表格定义。我在互联网上搜索复制数据,发现上面的查询插入最简单。但我不明白这个错误。搜索此错误表明它与日期列有关。但它不应该工作,因为两个表具有相同的表结构?

表中使用的数据类型是varchar2(x),日期,数字(x,y),char(x)。

请帮我解决这个错误。如果需要任何其他信息,请与我们联系。

1 个答案:

答案 0 :(得分:0)

这意味着您的schemaname.temp_table表有一些非数字值,不会在新表中插入。 schemaname.temp_table表是否填充了一些脚本或任何自动化工具?在schemaname.temp_table中插入空格或垃圾字符的可能性。请使用任何sql工具再次检查。