我需要使用 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
我做到了! :)
将列数据类型更改为 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')"
)
非常感谢。我尝试了一段时间类似的方法,但没有成功,但最终使用下面修改后的相同代码效果很好:
加载数据 进入表 test_pipe_sep 附加 尾随空值 ( FILE_NM char(4000) 以 ',' 结尾, KEY_COL 字符(30000), DESCR 以 ',' 结尾, RUN_DATE "to_date(sysdate, 'dd-mon-yyyy hh24:mi:ss')" )