SQL*Loader基本加载

基本准备工作

*:此处采用控制文件与数据文件分离的方法.

新建一个控制文件(名称与类型可任意,此处默认使用:ldr_case1.ctl):

1
2
3
4
5
6
LOAD DATA
INFILE oracledata.data
INTO TABLE BONUS
FIELDS TERMINATED BY ","
(ENAME,JOB,SAL)
BEGINDATA

详细:

  1. 开始部分,说明是要加载数据.
  2. 加载文件的地址,后面可以是相对或者绝对地址.[INFILE *]也可以
  3. [APPEND][REPLACE][INSERT][TRUNCATE] INTO tbl_name :第一个参数是追加到现有数据后面;第二个参数是替换掉现有数据,也就是先DELETE表中的数据,然后再进行INSERT操作;第三个参数是默认使用的,表必须为空,如果表非空的话,就会报错误;第四个参数类似于[REPLACE]参数,不同的是,这个参数使用TRUNCATE进行删除,然后再INSERT.
  4. 设置分隔符,此处较为复杂,下次继续分析.
  5. 表中的列名,无序,但名称必须对应.
  6. 以下为待加载数据,仅当第二行为INFILE * 时有效.

sqlldr
image-1820

示例部分

示例[控制文件与数据文件使用同一个文件]:

1
2
3
4
5
6
7
8
9
10
11
LOAD DATA
INFILE *
INTO TABLE BONUS
FIELDS TERMINATED BY ","
(ENAME,JOB,SAL)
BEGINDATA

TES1T,TE1STE,1234
TE2ST,TE41STE,1234
TES7T,TES4TE,1234
TE52ST,TES41TE,1234

示例[控制文件与数据文件分离[通常这样使用,比较方便]]:

控制文件:

1
2
3
4
5
6
LOAD DATA
INFILE oracledata.data
INTO TABLE
FIELDS TERMINATED BY ","
(ENAME,JOB,SAL)
BEGINDATA

数据文件:

1
2
3
4
TES1T,TE1STE,1234
TE2ST,TE41STE,1234
TES7T,TES4TE,1234
TE52ST,TES41TE,1234

执行与产生的文件

然后再终端执行如下命令:
请先确认,Oracle数据库已经运行,表已经创建!

1
2
3
4
5
sqlldr user/password CONTROL=ldr_case1.ctl

//user = 用户名
//password = 密码
//CONTROL = 控制文件路径

执行完命令,会产生一个与控制文件同名的日志文件(.log结尾),错误文件(.bad,如果dba没有修改的),如果你设定了废弃文件(.dsc结尾),那么还会产生废弃文件.