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

 

posted @ 2024-03-18 16:10  合法勒索夫  阅读(9)  评论(0编辑  收藏  举报