我想在名为ID_CARGA
的字段中向sql加载器收费,这个是数据库中的number(18)
。
我在装载机上有这一行:
ID_CARGA(1:18) ":ID_CARGA",
但当我尝试加载这些数据时:
000000000000000000
说ORA-01722
,我如何才能将这些值加载为有效的数字?
000000000000000000 like 0
000000000000000001 like 1
000000000000000150 like 150
非常感谢!
试试这个:
ID_CARGA position(1:18) NUMBER "TO_NUMBER(:ID_CARGA)"
您不需要在控制文件中有":ID_CARGA"
,如下所示:
ID_CARGA(1:18) ":ID_CARGA",
特别是用一个控制文件来描述格式化数据,您所需要做的就是:
ID_CARGA position(1:18),
通常,您会在数据描述中为ID_CARGA列(如果要调用SQL函数)。特别是在这种情况下,没有调用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