sql loader:使用sql loader加载大于4000个字符的字符串

时间:2017-09-07 07:33:04

标签: oracle oracle11g sql-loader

我需要使用sql loader将CSV文件加载到表中,但列的长度超过了varchar2数据类型的最大长度。

创建表语句:

 CREATE TABLE TEST_PIPE_SEP (FILE_NM VARCHAR2(3000), KEY_COL VARCHAr2(4000), DESCR VARCHAR2(4000), RUN_DATE DATE );

CTL档案:

load data
into table test_pipe_sep
append
fields terminated by ','
TRAILING NULLCOLS
(
 FILE_NM char(4000) "trim(:FILE_NM)",
 KEY_COL char(4000) "trim(:KEY_COL)",
 DESCR "trim(:DESCR)",
 RUN_DATE "to_date(sysdate, 'dd-mon-yyyy hh24:mi:ss')"
) 

CSV样本记录:

sample_file_name.csv,"B"|"STRESS_TESTING_SCENARIO_ID"|"TRANCHE_COLLATERAL_TYPE"|"TRANCHE_GUARANTEE_TYPE"|"BS_TYPE"|"CONTRACT_REFERENCE"|"CONTRACT_TYPE"|,Not Present in file2

我只是不粘贴全文,因为它会变得很长,但您可以将CSV或KEY_COL字段值中间列的长度附加到4000以上进行测试。

SQLLDR:

sqlldr userid=$SQL_CREDENTIALS control=new_test_3.ctl data=data/$filename log=logs/$filename.log bad=logs/$filename.bad skip=1

请建议我们是否可以使用SQL LOADER加载长度超过4000的字符串,或者是否存在针对此类问题的解决方法。

我在:

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

1 个答案:

答案 0 :(得分:0)

我做到了! :)

将列数据类型更改为CLOB,如下所示:

CREATE TABLE TEST_PIPE_SEP (FILE_NM VARCHAR2(3000), KEY_COL CLOB, DESCR VARCHAR2(4000), RUN_DATE DATE ); 

然后用于将数据加载到CLOB列的CTL如下:

load data
into table test_pipe_sep
append
fields terminated by ','
TRAILING NULLCOLS
(
 FILE_NM char(4000) "trim(:FILE_NM)",
 KEY_COL CHAR(30000) optionally ENCLOSED BY '<' AND '>',
 DESCR "trim(:DESCR)",
 RUN_DATE "to_date(sysdate, 'dd-mon-yyyy hh24:mi:ss')"
)