之前总结的关于SQL*Loader的用法,今天又用到,又翻出来看看
SQL*Loader 可将外部文件中的数据加载到Oracle DB 的表中。它具有一个功能强大的数据分析引擎,因此对数据文件中数据的格式没有什么限制。
SQL*Loader 使用以下文件:
-
输入数据文件:SQL*Loader 从控制文件中指定的一个或多个文件(或操作系统的等效文件)中读取数据。从SQL*Loader 的角度看,数据文件中的数据是按记录组织的。一个特定的数据文件可采用固定记录格式、可变记录格式或流记录格式。可通过控制文件中的INFILE参数指定记录格式。如果未指定记录格式,默认格式为流记录格式。
-
控制文件:控制文件是一个文本文件,它是使用SQL*Loader 可识别的语言编写的。控制文件指示SQL*Loader 在何处查找数据、如何分析和解释数据以及在何处插入数据等等。控制文件算是一个导入的模板。
-
日志文件:SQL*Loader 开始执行时,会创建日志文件。如果不能创建日志文件,执行就会终止。日志文件包含加载操作的详细说明,包括加载过程中发生的任何错误的说明。
-
坏文件:坏文件中包含被SQL*Loader 或Oracle DB 拒绝的记录。当输入格式无效时,SQL*Loader 就会拒绝数据文件记录。SQL*Loader 接受处理某一数据文件记录后,会将该数据文件记录发送到Oracle DB,以便能够作为一行插入到表中。如果Oracle DB 确定该行有效,就会将该行插入到表中;如果确定该行无效,则会拒绝该记录,然后SQL*Loader会将该记录放入坏文件中。
-
放弃文件:仅当需要这种文件并且指定了应启用放弃文件时,才会创建此文件。放弃文件中包含的记录是因不符合控制文件指定的任何记录选择标准而从加载中过滤掉的记录
后面三个可以不选
操作步骤如下:
1),建立数据文件,我这里使用的是从plsql developer中导出来的emp表emp.csv。
内容如下:
2),target表要存在,要保持与数据文件的字段定义一致,否则会出错。这里我使用as select方式根据emp表创建一张表emp3,再使用delete语句清空表数据。
3),建立一个控制文件user.ctl。我这里的控制文件是我用EM工具生成的。内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
OPTIONS (skip=1,rows=128) LOAD DATA
INFILE '/u01/app/oracle/oradata/orcl/emp.csv'
APPEND
INTO TABLE SCOTT.EMP3
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
(
EMPNO INTEGER EXTERNAL,
ENAME CHAR,
JOB CHAR,
MGR CHAR,
HIREDATE DATE,
SAL INTEGER EXTERNAL,
COMM INTEGER EXTERNAL,
DEPTNO INTEGER EXTERNAL
)
|
注:
1.LOAD DATA语句通知SQL*Loader 开始新数据加载操作
2.INFILE关键字指定含有待加载数据的数据文件的名称。这里还可以使用 BADFILE、DISCARDFILE 来指定坏数据和丢弃数据的文件
3.APPEND关键字是将数据加载到非空表时可以使用的选项之一。要将数据加载到空表中,请使用INSERT关键字。
4.INTO TABLE 要插入记录的表
5.Fields terminated by "," 定义数据中每行记录用 "," 分隔
6.Optionally enclosed by '"' -- 数据中每个字段用 '"' 框起,比如字段中有 "," 分隔符时
7.第一行处OPTIONS,skip=1是跳过第一行,rows=128定义要加载的行数限制
4),执行命令:
1
2
|
sqlldr system /oracle control=user.ctl
|
截图如下:
5),查询验证
sqlldr更多用法请自行网上搜索···