基本准备工作
*:此处采用控制文件与数据文件分离的方法.
新建一个控制文件(名称与类型可任意,此处默认使用:ldr_case1.ctl):
1 2 3 4 5 6 | LOAD DATA INFILE oracledata.data INTO TABLE BONUS FIELDS TERMINATED BY "," (ENAME,JOB,SAL) BEGINDATA |
详细:
- 开始部分,说明是要加载数据.
- 加载文件的地址,后面可以是相对或者绝对地址.[INFILE *]也可以
- [APPEND][REPLACE][INSERT][TRUNCATE] INTO tbl_name :第一个参数是追加到现有数据后面;第二个参数是替换掉现有数据,也就是先DELETE表中的数据,然后再进行INSERT操作;第三个参数是默认使用的,表必须为空,如果表非空的话,就会报错误;第四个参数类似于[REPLACE]参数,不同的是,这个参数使用TRUNCATE进行删除,然后再INSERT.
- 设置分隔符,此处较为复杂,下次继续分析.
- 表中的列名,无序,但名称必须对应.
- 以下为待加载数据,仅当第二行为INFILE * 时有效.
示例部分
示例[控制文件与数据文件使用同一个文件]:
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结尾),那么还会产生废弃文件.