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

问题描述 投票:0回答:2

我需要使用 sql 加载器将 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
oracle oracle11g sql-loader
2个回答
1
投票

我做到了! :)

将列数据类型更改为 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')"
)

0
投票

非常感谢。我尝试了一段时间类似的方法,但没有成功,但最终使用下面修改后的相同代码效果很好:

加载数据 进入表 test_pipe_sep 附加 尾随空值 ( FILE_NM char(4000) 以 ',' 结尾, KEY_COL 字符(30000), DESCR 以 ',' 结尾, RUN_DATE "to_date(sysdate, 'dd-mon-yyyy hh24:mi:ss')" )

© www.soinside.com 2019 - 2024. All rights reserved.