Oracle命令行加载CSV至表无报错但表为空问题求助
问题描述
尝试通过命令行将CSV文件导入Oracle数据库的tmp_x表,执行以下语句后无报错,但表始终为空:
CREATE TABLE tmp_x (codice varchar(100), descrizione varchar(300), tipo varchar(100), macroarea varchar(100), includere varchar(100)); LOAD DATA INFILE '/home/-/Documenti/Tabelle_per_App/OK/REPARTI_modifiche.csv' into table tmp_x field terminated by ',' LINES TERMINATED BY "" "" (codice, descrizione, tipo, @vmacroarea, includere) SET macroarea = NULLIF(@vmacroarea,'')
CSV示例数据如下:
| CODICE | DESCRIZIONE | TIPO | MACROAREA | INCLUDERE |
|---|---|---|---|---|
| C19 | COLLABORATORI COVID19 | I | NO | |
| CCV | COVID COLLABORATORI VACCINATI | E | NO | |
| CET | CONTROLLI ENDOSCOPIA TORACICA | I | NO | |
| D0800 | Cardiologia | I | MEDICA | SI |
| D0900 | Chirurgia Generale | I | CHIRURGICA | SI |
要求:仅通过命令行完成,禁止创建外部表。
排查与解决步骤
1. 修正换行符配置
你的LINES TERMINATED BY语法存在错误,Oracle SQL*Loader的换行符需根据系统正确指定:
- Unix/Linux系统用
'\n' - Windows系统用
'\r\n'
修改后的LOAD语句:
LOAD DATA INFILE '/home/-/Documenti/Tabelle_per_App/OK/REPARTI_modifiche.csv' INTO TABLE tmp_x FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' -- 若CSV字段含引号包裹需添加此句 LINES TERMINATED BY '\n' (codice, descrizione, tipo, @vmacroarea, includere) SET macroarea = NULLIF(@vmacroarea, '')
2. 检查文件权限与路径
- 确保Oracle数据库进程拥有该CSV文件的读取权限
- 替换路径中的
-为实际用户名,确认路径准确(比如/home/your_user/Documenti/Tabelle_per_App/OK/REPARTI_modifiche.csv) - 在数据库服务器执行
ls -l /home/-/Documenti/Tabelle_per_App/OK/REPARTI_modifiche.csv验证文件是否存在
3. 启用SQL*Loader日志排查
执行LOAD命令时添加日志参数,生成详细日志定位问题:
sqlldr username/password@database control=load_data.ctl log=load_data.log
其中load_data.ctl是包含LOAD语句的控制文件,日志会显示读取行数、跳过行数、错误详情等关键信息。
4. 处理CSV格式细节
- 确认CSV中MACROAREA列的空值为纯空白字符串,而非空格或不可见字符
- 若字段包含逗号,必须用引号包裹,此时需保留
OPTIONALLY ENCLOSED BY '"'参数
5. 跳过CSV表头(若存在)
如果CSV文件第一行是表头,需添加SKIP 1跳过该行:
LOAD DATA INFILE '/home/-/Documenti/Tabelle_per_App/OK/REPARTI_modifiche.csv' INTO TABLE tmp_x FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' SKIP 1 -- 跳过CSV表头行 (codice, descrizione, tipo, @vmacroarea, includere) SET macroarea = NULLIF(@vmacroarea, '')
内容的提问来源于stack exchange,提问作者Denise Lavezzari
相关产品推荐
相关产品推荐

