SQL*Loader是Oracle提供的用于将外部文件中的数据加载到数据库表中的工具。使用SQL*Loader可以完成:
- 远程load数据
- 从多个文件中load数据
- 将数据load到多个表中
- 指定数据的字符集
- 选择性的load的数据
- load数据前先处理数据
- 在某一列生成唯一的序列值
- 可以使用传统路径(通过SQL)或直接路径(直接操纵数据块)load数据,前者较为灵活,后者性能更好
SQL*Loader的执行流程如下图:
SQL*Loader的两个输入参数是一个控制文件和若干数据文件。SQL*Loader无法处理的记录会输出到bad files,不符合条件的记录输出到discard files。
使用sqlldr [参数列表]命令执行SQL*Loader会话。sqlldr的参数既可以写在
命令行中,还可以集中写在
参数文件中,并通过parfile参数指定参数文件,也可以在控制文件的
options子句中说明。
其中命令行中的参数具有最高优先级,即会覆盖其他位置的参数。
- SQL*Loader的数据文件
SQL*Loader有三种格式的数据文件,可以通过控制文件中的infile参数指定数据文件的格式。
Fixed Record Format:
数据文件中的所有记录具有相同的长度(bytes),
指定数据文件为固定长度记录格式:INFILE datafile_name "fix n"其中n就是数据文件中一条记录的长度。
load data
infile 'example.dat' "fix 11"
into table example
fields terminated by ',' optionally enclosed by '"'
(col1, col2)
example.dat:
001, cd, 0002,fghi,
00003,lmn,
1, "pqrs",
0005,uvwx,
示例数据文件包含5条记录,分别是[001,...cd,.] ,[0002,fghi,\n],[00003,lmn,\n],[1,."pqrs",\n],[0005,uvwx,\n]
Variable Record Format:
数据文件中的记录长度不固定,由每条记录的前n个字节指定该记录的长度。
指定数据文件为可变长度记录格式:INFILE "datafile_name" "var n" 其中n指定每条记录的前n个字节表示该记录的长度。
n默认为5,指定n>40时会报错。
load data
infile 'example.dat' "var 3"
into table example
fields terminated by ',' optionally enclosed by '"'
(col1 char(5),
col2 char(7))
example.dat:
009hello,cd,010world,im,
012my,name is,
Stream Record Format:
流记录格式不指定每条记录的长度,也是SQL*Loader的默认格式,灵活性最高。SQL*Loader通过终结符判断记录是否结束。
指定数据文件为流记录格式:INFILE datafile_name ["str terminator_string"],terminator_string即是终结符。
terminator_string有两种格式:字符格式和十六进制格式,字符格式需要使用单引号或双引号,十六进制适用于那些不可打印的字符,下属字符除外:
\n 换行符
\f 换页符
\r 回车符
\t 水平制表符
\v 垂直制表符
如果NLS_LANG参数指定的字符集与数据文件使用的字符集不一致,SQL*Loader在检查终结符之前,会先把字符集转化为数据文件的字符集。如果采用十六进制则不用转换。
load data
infile 'example.dat' "str '|\n'"
into table example
fields terminated by ',' optionally enclosed by '"'
(col1 char(5),
col2 char(7))
example.dat:
hello,world,|
james,bond,|
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25791987/viewspace-719860/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/25791987/viewspace-719860/