SQL加载程序出错,编号无效ORA-01722

时间:2014-09-29 12:21:47

标签: oracle sql-loader

我想在名为ID_CARGA的字段中为sql加载器收费,这个是数据库中的number(18)

我在装载机这行:

ID_CARGA(1:18) ":ID_CARGA",

但是当我尝试加载这些数据时:

000000000000000000

ORA-01722,如何将此值加载为有效数字?

000000000000000000 like  0
000000000000000001 like 1
000000000000000150 like 150

非常感谢!

2 个答案:

答案 0 :(得分:0)

试试这个:

ID_CARGA position(1:18)  NUMBER "TO_NUMBER(:ID_CARGA)"

答案 1 :(得分:0)

您不需要在控制文件中使用":ID_CARGA",如下所示:

ID_CARGA(1:18) ":ID_CARGA",

特别是用一个描述固定的控制文件 格式数据,您需要做的就是:

ID_CARGA position(1:18),

通常情况下,您会有一个引用的数据描述部分 如果要调用SQL函数,则为ID_CARGA列。在你的特殊 例如,没有调用SQL函数,因此它是不必要的。

当我运行此修改后的表单时,我的数据加载正常。

以下是我的示例变体:

CREATE TABLE "SCOTT"."TEST" 
   (    "ID_CARGA" NUMBER(18,0)
   );

控制文件:

OPTIONS (SKIP=0)
LOAD DATA
INFILE *
BADFILE 'test_bad.bad'
DISCARDFILE 'test_dis.dsc'
APPEND
INTO TABLE SCOTT.TEST 
(
ID_CARGA position(1:18)
)
BEGINDATA
000000000000000000
000000000000000001
000000000000000150

SCOTT@dev> 
SCOTT@dev> CREATE TABLE scott.test
  2    ( id_carga NUMBER(18,0)
  3    );

Table created.

SCOTT@dev> commit;

Commit complete.

SCOTT@dev> SELECT * FROM scott.test
  2  ;

  ID_CARGA
==========
         0
         1
       150