我需要使用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
答案 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')"
)