oracle批量导入与导出——SQLloader&SPOOL用法简记
sql*loader导入数据
①:导入路径必须为英文路径,出现中文路径会乱码无法找到ctl脚本;
②:被导入的数据可以为csv、txt、dat文件,文本格式必须全部一致,分割符号格式全部一致否则一个提交内无法导入数据;
③:在DOS窗口命令批量sql*loader导入数据 或 直接运行编写好的.bat批处理文件直接导入数据库;
④:在linux中操作与dos(win)基本相同。
一:准备
ctl控制文件+txt、csv、dat源数据文件 数据库需要批量导入数据的表
二:ctl控制文件脚本
——————————————————————————————————————————————————
options (skip=1,rows=5)
——(配置参数 ,括号内的内容可写在sqlldr命令行之后,也可单独作为.par参数文件 )(跳过第一条skip=1)
load data
——LOAD DATA前还可指定 UNRECOVERABLE或RECOVERABLE来控制此次加载的数据是否可恢复,或者指定CONTINUE_LOAD,表示继续加载,控制文件的其他语句可以查看官方文档;
infile ‘F:\desktop\LEARN\ETL\practicedocuments\persons.txt’
——加载的文件位置 ;(如果控制文件自带数据,写法如下:INFILE * INTO TABLE XX)
append into table persons
——即数据要加载到的目标表,该表在你执行sqlldr命令之前必须已经创建。
*INSERT:向表中插入数据,表必须为空,如果表非空的话,执行sqlldr命令时会报错,默认就是INSERT参数。
*APPEND:向表中追加数据,不管表中是否有数据。
*REPLACE:替换表中数据,相当于先DELETE表中全部数据,然后再INSERT。
*TRUNCATE:类似REPLACE,只不过这里不是用DELETE方式删除表中数据,而是通过TRUNCATE的方式删除,然后再INSERT。
fields terminated by ‘,’
——设置数据部分字符串的分隔值,逗号(,)分隔,可用其他分隔符
trailing nullcols
——将所有不在纪录中的指定位置的列当作空值
(no,location,shenhe_no,name,startyear)
——要插入表的列名,可与库表顺序不同但必须名字相同、与源数据顺序相同。
begindata
——表示以下为待加载数据,仅当INFILE指定为时有效
三:txt、csv、dat数据文件准备
【数据文件如下.txt格式】
省总序号,审核地市,报名序号,姓名,资格审核开始年份
1,北京市,00311401,金粉,201910,
2,北京市,00311402,大家好,201910,
3,北京市,00311403,服从 ,201910,
4,北京市,00311404,拉下我,201910,
5,北京市,00311405,在线,201910,
【总结控制脚本如下】:
options (skip=1,rows=5)
load data
infile ‘F:\desktop\LEARN\ETL\practicedocuments\persons.txt’
append into table persons
fields terminated by ‘,’
trailing nullcols
(no,location,shenhe_no,name,startyear)
【数据文件如下.txt格式】
省总序号,审核地市,报名序号,姓名,资格审核开始年份
1,北京市,00311401,金粉,201910,
2,北京市,00311402,大家好,201910,
3,北京市,00311403,服从 ,201910,
4,北京市,00311404,拉下我,201910,
5,北京市,00311405,在线,201910,
四:导入
DOS窗口输入:sqlldr userid=HR/hr136 control=F:\desktop\LEARN\ETL\practicedocuments\persons.ctl(**选填skip=1 load=3跳过第一行,导入3条,可以忽略从源系统数据中自带的表头)
———————————————————————————————————————————————————————
———————————————————————————————————————————————————————
SPOOL导出txt文本文件
用来 SPOOL导出文本文件的是一个.SQL脚本,脚本内设置好导出参数,执行脚本即可。
一:脚本参数设置
–示例选取参数,实际参数按需设置
set echo off --显示START启动的脚本中的每个SQL命令,缺省为ON
set feedback off --是否显示反馈信息(显示本次SQL命令处理的记录条数,缺省为ON)
set verify off --关于变量是否显示改变时的新旧状态(可以关闭和打开提示确认信息old 1和new 1的显示)
set pagesize 0 --每页显示的数据行数(0为不分页)
set termout off --不显示脚本运行结果
set trimout on --去除标准输出每行的拖尾空格,缺省为OFF
set linesize 20000 --输出一行字符个数为20000
set heading off --控制报表中列标题的打印.为on时 在报表中打印列标题 为off时禁止打印列标题
set trimspool on --去掉脚本输出行尾部的空格
set timing off --显示SQL语句的运行时间
set headsep off --定义标题分隔字符.可在column命令中使用标题分隔符 将列标题分成多行.on和off将标题分隔置成开或关.当标题分隔为关(off)时 sqlplus打印标题分隔符像任何字符一样
set arraysize 5000 --sqlplus一次从数据库获取的行数 有效值为1至5000,当超过1000时 其效果不大
set numwidth 38 --输出NUMBER类型域长度,缺省为10
–set colsep ‘chr(27)’ --输出列之间的分隔符
二:输出TXT文件
spool F:\desktop\LEARN\ETL\practicdocument\emp1.txt --输出目录,输出文件名称、格式
三:选择输出的查询语句
select ename,empno,sal from emp where empno=7369;
四:关闭SPOOL
spool off
五:总结如下
set echo off
set feedback off
set verify off
set pagesize 0
set termout off
set trimout on
set linesize 20000
set heading off
set trimspool on
set timing off
set headsep off
set arraysize 5000
set numwidth 38
spool F:\desktop\LEARN\ETL\practicdocument\emp1.txt
select ename,empno,sal from emp where empno=7369;
spool off
——————————————————————————————————————————————