如何在SQL Loader中使用多条件筛选导入指定部门数据?
没问题,这事儿用SQL Loader自带的过滤功能就能轻松搞定,我给你一步步拆解操作:
使用SQL Loader导入CSV指定部门数据到Oracle表
1. 编写SQL Loader控制文件(核心步骤)
你需要创建一个控制文件(比如命名为dept_loader.ctl),在里面定义CSV的数据格式,同时通过WHEN子句精准筛选出部门为10、90、30、70的行。
以下是控制文件的示例代码,你可以根据自己的实际情况调整:
LOAD DATA INFILE '你的CSV文件绝对路径.csv' -- 替换成你真实的CSV文件路径 -- 如果你的CSV第一行是表头(id、name、dept),一定要加上下面这句跳过表头 -- SKIP 1 INTO TABLE DEPT_LOADER FIELDS TERMINATED BY ',' -- CSV字段用逗号分隔 -- 如果CSV里的字段是用双引号包裹的(比如"1","张三","10"),加上这句处理 -- OPTIONALLY ENCLOSED BY '"' WHEN (DEPT IN ('10', '90', '30', '70')) -- 只导入指定部门的数据 ( ID, -- 对应CSV第一列 NAME, -- 对应CSV第二列 DEPT -- 对应CSV第三列 )
小提示:如果你的CSV里DEPT列是纯数字(没有引号),
WHEN子句也可以写成WHEN (DEPT IN (10, 90, 30, 70)),效果是一样的。
2. 执行SQL Loader导入命令
打开终端(Windows用命令提示符,Linux/macOS用终端),运行sqlldr命令,传入数据库连接信息和控制文件参数。因为你的数据有70多万行,建议设置ROWS参数批量提交,能大幅提升导入效率。
示例命令如下,记得替换成你的数据库信息:
sqlldr 你的用户名/你的密码@你的Oracle服务名 control=dept_loader.ctl log=dept_loader.log bad=dept_loader.bad rows=10000
参数说明:
control:指定刚才写的控制文件路径log:生成导入日志文件,里面会记录导入总条数、成功数、失败数等关键统计bad:生成错误文件,存放导入失败的行(比如格式错误的行)rows:每10000行数据提交一次事务,适合大数据量导入,减少数据库压力
额外注意事项
- 确保Oracle用户拥有
DEPT_LOADER表的插入权限 - 如果CSV里的NAME字段包含逗号(比如
"张三,李四"),一定要加上OPTIONALLY ENCLOSED BY '"',避免字段被错误拆分 - 导入完成后优先查看
dept_loader.log文件,确认导入结果是否符合预期
内容的提问来源于stack exchange,提问作者SwapnaSubham Das




