sql loader
1.如果所给是一个excel,直接另存为csv格式
2.分隔符不是逗号,可以在控制文件中用fields terminated by的值修改
导入文件,需要有控制文件和数据文件
控制文件内容:
load data
infile data.dat
truncate into table t_simtype
fields terminated by "," optionally enclosed by '"'
(ENAME,JOB,SAL)
数据文件存储按照控制文件中的说明格式的数据
运行sqlldr:
sqlldr xxxx/xxxx control=xxxx(控制文件名)
若没有分隔符,可以指定字符串范围
如:
load data
infile xxx.dat
truncate into table xxxx
(
ename position(1:5),
job position(7:15),
sal position(17:20)
)
可以用position(*+2:15) *表示上一个字段的结束位置
3.数据文件中的列比要导入到表中的少
load data
infile xxx.dat
truncate into table xxxx
(
ename position(1:5),
job position(7:15),
sal "0"
comm "substr(:sal,1,1)"
)
4.数据文件中有多余列
(1)定长的
load data
infile xxx.dat
truncate into table xxxx
(
ename position(1:6)
tcol filler position(8:11)
job position(13:21)
)
(2)非定长
load data
infile xxx.dat
truncate into table xxxx
fields terminated by ","
(ename,tcol filler,job,sal)
4.多个数据文件导入同一张表
load data
infile xxx1.dat
infile xxx2.dat
truncate into table xxxx
fields terminated by ","
(mgrno,mname,job)
5.同一个数据文件,导入不同的表
load data
infile xx.dat
discardfile xxx.dat
truncate
into table xxxx
when tab='bon'
(tab filler position(1:3),
ename position(5:9),
job position(*+1:18)
)
into table xxxx1
when tab='mgr'
(tab filler position(1:3),
mgrno position(4:5),
mname position(7:13)
)
6.对导入数据做修改
仅适用于常规导入
load data
infile xx/xx
into table xxxx
(
rec_no "my_db_sequenct.nextval",
region CONSTANT '31',
time_loaded "to_Char(sysdate,'hh24:MI')",
data1 position(1:5) ":data/100"
data2 position(6:15) "upper(:data2)",
data3 position(16:22) "to_date(:data3,'YYMMDD')"
)
跳过指定行数
load data
infile xxx/xxx
into table xxx
skip 5(跳过前五行)
(
data1 position(1:5)
data2 position(6:15)
)
7.文件的导出
可使用如下语句
set echo off newpage 0 space 0 pagesize 0 feed off head off trimspool on spool oradata.txt
select col1 || ',' || col2 || ',' || col3 from tab1
where col2='xyz';
spool off
when中只支持and,不支持or
转载于:https://blog.51cto.com/889900883300/888835