Oracle 之:spool 导出 与 sqlldr 导入
说明,内容均来自 Alfred Zhao 的 https://www.cnblogs.com/jyzhao/p/4819884.html
(感谢分享),以下仅记录个人操作过程中的关键说明:
一. 使用 sqlplus 导出查询结果:
1. 准备脚本 call.sql
如果只需要单纯的导出 excel或 csv ,可以 PL/SQL 中进行查询导出再另存为。这里只是尝试一下 sqlplus 功能。
具体语法可参考 https://www.cnblogs.com/hzj680539/p/4212271.html
set echo off set term off set line 1000 pages 0 set feedback off set heading off set trimspool on spool D:\ldr_object.csv -- 执行结果导出到这 @D:\getobject.sql -- 执行的查询,直接sql脚本也行(例:SELECT * FROM XXX ; ) spool off set trimspool off set heading on set feedback on set term on set echo on
2.执行脚本 call.sql
(1)sqlplus /nolog 先进入sqlplus命令模式
(2)start call.sql 在sqlplus命令模式下执行(坑点:SQL中含中文可能会异常,折衷处理方式为,将 call.sql 中的内容复制到 Sqlplus 窗口中执行)
二. 使用 sqlldr 导入数据:
1. 准备控制文件 ldr_object.ctl
load data infile "D:\ldr_object.csv" --将导入的数据文件,可以是 csv、txt、log 等,可多个(一个一行),坑点:路径或文件名含中文可能会引发异常 truncate into table objects --先truncate(可选),再insert|replace|append fields terminated by "," -- 数据中每行记录用 "," 分隔
optionally enclosed by '"' -- 数据中每个字段用 '"' 框起,比如字段中有 "," 分隔符时
TRAILING NULLCOLS -- 当某行对应的列没有值时,sqlldr自动赋值为null,而不是报错 (owner, object_name, object_id, created "to_date(:created,'yyyy-mm-dd hh24:mi:ss')", status "trim(:status)" )
1. 执行控制文件 ldr_object.ctl
(1)进入 cmd 命令模式
(2)执行 sqlldr xxx=yyy ……
sqlldr userid=SCOTT/123456@ORCL --登录信息 control=D:\ldr_object.ctl --控制文件路径 bad=D:\ldr_object4.bad --错误文件 log=D:\ldr_object4.log --日志文件 skip=0 --跳过前几行 errors=9999 --异常几次后停止 rows=10000 --每读几行处理一次(批处理) direct=true streamsize=10485760 date_cache=5000
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库