1. SQL*Loader :概览
SQL*Loader 可将外部文件中的数据加载到 Oracle DB 表中。它具有一个功能强大的数据
分析引擎,因此对数据文件中数据的格式没有什么限制。
SQL*Loader 使用以下文件:
输入数据文件: SQL*Loader 从控制文件中指定的一个或多个文件(或操作系统的文件副
本)中读取数据。从 SQL*Loader 的角度看,数据文件中的数据是按记录组织的。特定数
据文件可以为固定记录格式、可变记录格式或流记录格式。可通过控制文件中的 INFILE
参数指定记录格式。如果未指定记录格式,默认格式为流记录格式。
控制文件:控制文件是一个文本文件,它是使用 SQL*Loader 可识别的语言编写的。控制
文件指示 SQL*Loader 在何处查找数据、如何分析和解释数据,以及在何处插入数据等。
尽管不能精确地定义,但可认为控制文件包含三个段。
• 第一段包含如下面所示的会话范围信息:
- 全局选项,如输入数据文件名和要跳过的记录
- 用于指定输入数据位置的 INFILE 子句
- 要加载的数据
• 第二个段包括一个或多个 INTO TABLE 块。其中每一个块都包含要在其中加载数据
的表的信息(如表名和表列)。
• 第三个段是可选段,如果该段存在,则包含输入数据。
日志文件: SQL*Loader 开始执行时,它会创建日志文件。如果不能创建日志文件,执行
就会终止。日志文件包含加载操作的详细概要,包括加载过程中发生的任何错误的说明。
坏文件:坏文件包含被 SQL*Loader 或 Oracle DB 拒绝的记录。当输入格式无效时,
SQL*Loader 就会拒绝数据文件记录。 SQL*Loader 接受待处理的某一数据文件记录后,会
将该数据文件记录发送到 Oracle DB ,以便可作为一行插入到表中。如果 Oracle DB 确定
该行有效,就会将该行插入到表中。如果确定该行无效,就会拒绝该记录,此时
SQL*Loader 会将该记录置于坏文件中。
放弃文件:仅当需要这种文件并且指定了应启用放弃文件时,才会创建这种文件。放弃文
件中包含因不符合控制文件中指定的任何记录选择标准而被过滤掉的记录。
有关 SQL*Loader 的详细信息,请参阅 《Oracle 数据库实用程序 》 指南。
2. SQL*Loader 控制文件
1 -- This is a sample control file
2 LOAD DATA
3 INFILE ’ SAMPLE.DAT ’
4 BADFILE ’ sample.bad ’
5 DISCARDFILE ’ sample.dsc ’
6 APPEND
7 INTO TABLE emp
8 WHEN (57) = ’.’
9 TRAILING NULLCOLS
10 (hiredate SYSDATE,
deptno POSITION(1:2) INTEGER EXTERNAL(3)
NULLIF deptno=BLANKS,
job POSITION(7:14) CHAR TERMINATED BY WHITESPACE
NULLIF job=BLANKS " UPPER(:job) " ,
mgr POSITION(28:31) INTEGER EXTERNAL
TERMINATED BY WHITESPACE, NULLIF mgr=BLANKS,
ename POSITION(34:41) CHAR
TERMINATED BY WHITESPACE " UPPER(:ename) " ,
empno POSITION(45) INTEGER EXTERNAL
TERMINATED BY WHITESPACE,
sal POSITION(51) CHAR TERMINATED BY WHITESPACE
" TO_NUMBER(:sal, ’ $99,999.99 ’ ) " ,
comm INTEGER EXTERNAL ENCLOSED BY ’ ( ’ AND ’ % ’
" :comm * 100 "
)
此控制文件示例的说明(按行号)如下所示:
1. 注释可出现在文件命令段中的任何位置,但绝不能出现在数据内部。任何注释之前都
有两个连字符。双连字符右边的所有文本(直至行尾)都会被忽略。
2. LOAD DATA 语句通知 SQL*Loader 开始新数据加载操作。如果继续执行已中断的加
载操作,请使用 CONTINUE LOAD DATA 语句。
3. INFILE 关键字指定要加载的数据所在的数据文件的名称。
4. BADFILE 关键字指定在其中放置拒绝记录的文件名。
5. DISCARDFILE 关键字指定在其中放置放弃记录的文件名。
6. APPEND 关键字是将数据加载到非空表时可使用的选项之一。要将数据加载到空表
中,请使用 INSERT 关键字。
7. 使用 INTO TABLE 关键字可标识表、字段和数据类型。这个关键字定义了数据文件
记录与数据库表之间的关系。
8. WHEN 子句指定 SQL*Loader 加载数据之前每条记录必须匹配的一个或多个字段条
件。在此示例中, SQL*Loader 只在第 57 个字符为小数点时才加载记录。这个小数点
用于分隔字段中的美元和美分,如果 SAL 不包含任何值,这个小数点会导致记录被
拒绝。
9. TRAILING NULLCOLS 子句提示 SQL*Loader 将记录中不存在的所有相关占位列视
为空列。
10. 控制文件的余下部分包含一些字段列表,用于提供正在加载的表中列格式的信息。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30898123/viewspace-2643243/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/30898123/viewspace-2643243/