SQLLDR
用法: SQLLDR keyword=value [,keyword=value,...]
控制文件:input.ctl,内容如下:
load data --1、控制文件标识
infile 'test.txt' --2、要输入的数据文件名为test.txt
append into table test --3、向表test中追加记录
fields terminated by X'09' --4、字段终止于X'09',是一个制表符(TAB)
(id,username,password,sj) -----定义列对应顺序
a、insert,为缺省方式,在数据装载开始时要求表为空
b、append,在表中追加新记录
c、replace,删除旧记录,替换成新装载的记录
d、truncate,同上
sqlldr scott/tigger control=d:\ldr_test
将数据导入数据库
1. Excel文件: 另存为.csv文件, csv文件字段以逗号分隔
2. 要加载的文件不是以逗号分隔
a) 修改数据文件,将分隔符替换为逗号
b) 修改控制文件,将FIELDS TERMINATED BY的值修改为实际的分隔符
3. 要加载的数据中包含分隔符
使用FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"'
4. 数据文件中没有分隔符
使用position关键字来指定列的开始和结束位置。如:ENAME position(7:15)
position(*+2:15): 直接指定数值的方式叫作绝对编量, 使用*号,相对偏移量
position(*+2:15)表示从上次结束的位置+2的地方开始
position(*)char(9)相对偏移量+类型和长度
5. 数据文件中的列比要导入的表中列少
可以进行赋值
如: ENAME "0" 或 ENAME "substr(:SAL, 1, 1)"
6. 数据文件中的列比要导入的表中列多
使用FILLER关键字,用来指定过滤列
如: TCOL FILLER position(8:11) 表示第8到第11列之间的数据不导入
7. 提供了多个数据文件,要导入同一张表
只需要指定多个INFILE参数
8. 同一个数据文件,要导入不同表
使用WHEN关键字,如: WHEN TAB='XXX' ( TAB FILLER POSITION(1:3) ...)
9. 前N行不导入
在SQLLDR命令后面加SKIP指定
SQLLDR SCOTT/TIGGER CONTROL=LDR_TEST.CTL SKIP=3
表示前3行不导入,从第4行开始加载
10. 数据中有换行符
在数据加载前处理字段的数据,将里面的“\n”字符替换为chr(10),即标准换行符
ENAME "replace(:ename, '\\n', chr(10))"
11. 指定FIX属性处理换行符(定长数据文件专用)
如:INFILE ldr_test.dat "fix 68"
FIX是INFILE关键字的一个属性,还有VAR、STR
12. 导入大字段(CLOB类型)
a) 数据保存在数据文件中
b) 数据保存在独立的文件中
FILENAME position(*+1) char(200) "substr(:FILENAME, instr(:FILENAME, '\\', -1) + 1)"
13. 某些字段无值
用法: SQLLDR keyword=value [,keyword=value,...]
控制文件:input.ctl,内容如下:
load data --1、控制文件标识
infile 'test.txt' --2、要输入的数据文件名为test.txt
append into table test --3、向表test中追加记录
fields terminated by X'09' --4、字段终止于X'09',是一个制表符(TAB)
(id,username,password,sj) -----定义列对应顺序
a、insert,为缺省方式,在数据装载开始时要求表为空
b、append,在表中追加新记录
c、replace,删除旧记录,替换成新装载的记录
d、truncate,同上
sqlldr scott/tigger control=d:\ldr_test
将数据导入数据库
1. Excel文件: 另存为.csv文件, csv文件字段以逗号分隔
2. 要加载的文件不是以逗号分隔
a) 修改数据文件,将分隔符替换为逗号
b) 修改控制文件,将FIELDS TERMINATED BY的值修改为实际的分隔符
3. 要加载的数据中包含分隔符
使用FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"'
4. 数据文件中没有分隔符
使用position关键字来指定列的开始和结束位置。如:ENAME position(7:15)
position(*+2:15): 直接指定数值的方式叫作绝对编量, 使用*号,相对偏移量
position(*+2:15)表示从上次结束的位置+2的地方开始
position(*)char(9)相对偏移量+类型和长度
5. 数据文件中的列比要导入的表中列少
可以进行赋值
如: ENAME "0" 或 ENAME "substr(:SAL, 1, 1)"
6. 数据文件中的列比要导入的表中列多
使用FILLER关键字,用来指定过滤列
如: TCOL FILLER position(8:11) 表示第8到第11列之间的数据不导入
7. 提供了多个数据文件,要导入同一张表
只需要指定多个INFILE参数
8. 同一个数据文件,要导入不同表
使用WHEN关键字,如: WHEN TAB='XXX' ( TAB FILLER POSITION(1:3) ...)
9. 前N行不导入
在SQLLDR命令后面加SKIP指定
SQLLDR SCOTT/TIGGER CONTROL=LDR_TEST.CTL SKIP=3
表示前3行不导入,从第4行开始加载
10. 数据中有换行符
在数据加载前处理字段的数据,将里面的“\n”字符替换为chr(10),即标准换行符
ENAME "replace(:ename, '\\n', chr(10))"
11. 指定FIX属性处理换行符(定长数据文件专用)
如:INFILE ldr_test.dat "fix 68"
FIX是INFILE关键字的一个属性,还有VAR、STR
12. 导入大字段(CLOB类型)
a) 数据保存在数据文件中
b) 数据保存在独立的文件中
FILENAME position(*+1) char(200) "substr(:FILENAME, instr(:FILENAME, '\\', -1) + 1)"
13. 某些字段无值
使用TRAILING NULLCOLS , 如:FIELDS TERMINATED BY "," TRAILING NULLCOLS
以上内容摘自<三思ORACLE>