Oracle外部表导入单列CSV时去除双引号的方案咨询
Oracle外部表导入单列CSV去除双引号解决方案
问题分析
你的CSV为单列无分隔符结构,原外部表配置中多余的TERMINATED BY ','导致Oracle无法正确识别字段边界,加上换行符解析可能存在的问题,最终导致导入的数据被错误包裹双引号且包含换行符。
解决方案
方案1:调整外部表核心配置(推荐)
移除多余的分隔符配置,明确字段定义,从根源解决解析异常:
CREATE TABLE XXINT_IRS_EXT( "INVOICE_NUM" VARCHAR2 (100 BYTE) ) ORGANIZATION EXTERNAL (TYPE oracle_loader DEFAULT DIRECTORY "OEB_INBOUND_DIR" ACCESS PARAMETERS ( RECORDS DELIMITED BY NEWLINE BADFILE 'IRS14.bad' LOGFILE 'IRS14.log' SKIP 1 FIELDS -- 移除多余的TERMINATED BY ',',单列无需逗号分隔 OPTIONALLY ENCLOSED BY '"' TRAILING NULLCOLS ( INVOICE_NUM VARCHAR2(100) ) LOCATION ("INBOUND_DIR" : 'IRS14.csv') ) REJECT LIMIT UNLIMITED;
若确认CSV数据中完全不存在双引号,可直接删除
OPTIONALLY ENCLOSED BY '"',进一步简化解析逻辑。
方案2:适配Windows格式CSV的换行符
如果你的CSV是Windows生成的(换行符为\r\n),修改记录分隔符配置以避免读取多余的回车符:
RECORDS DELIMITED BY '\r\n'
方案3:查询时临时修正数据(应急用)
若无法修改外部表,可通过字符串函数在查询时去除双引号和多余换行:
SELECT TRIM(BOTH '"' FROM REPLACE(INVOICE_NUM, CHR(10), '')) AS INVOICE_NUM FROM XXINT_IRS_EXT;
内容的提问来源于stack exchange,提问作者user3436905
相关产品推荐
相关产品推荐

