ORACLE_OCP之SQLLOADER实验
-
建立一个实验用目录:
mkdir -p /home/oracle/sqlldr --在ORACLE用户下执行
-
在数据库HR用户下创建一个表:
create table dept(deptno number(5),dname varchar2(15),loc varchar2(15));
-
创建数据文件
vi test.dat 10,"A","CHINA" 11,"B","USA" 12,"C","RUSSIA" 13,"D","INDIA" 14,"E","KOREA" 15,"F","JAPAN" 16,"G","FRANCE" 17,"H","ENGLISH"
-
创建控制文件
vi test.ctl load data infile 'test.dat' --指定加载的数据文件,可以是单独的文件名/相对路径/(控制文件和加载文件在一起时),也可以带有目录的文件名/绝对路径/ 控制文件和加载的数据文件不在一个目录下 into table dept fields terminated by ',' optionally enclosed by '"' (deptno,dname,loc)
-
加载数据
sqlldr hr/hr control=test.ctl log=test.log
- 如果数据文件中,有列头,那么进行数据加载时,可能会出错,生成一个bad文件,如果跳过,可以指定SKIP。修改数据文件使之无错,如下:
-
创建数据文件
vi test01.dat deptno,dname,loc 10,"A","CHINA" 11,"B","USA" 12,"C","RUSSIA" 13,"D","INDIA" 14,"E","KOREA" 15,"F","JAPAN" 16,"G","FRANCE" 17,"H","ENGLISH"
-
创建控制文件
cat test01.ctl load data field names all files ignore --指定该配置,可忽略字段头信息 infile 'test01.dat' into table dept fields terminated by ',' optionally enclosed by '"' (deptno,dname,loc)
-
数据加载
sqlldr hr/hr control=test01.ctl log=test01.log
总结:
-
相关参数补充:
- insert --为缺省方式,在数据装载开始时要求表为空
- append --在表中追加新记录
- replace --删除旧记录(用 delete from table 语句),替换成新装载的记录
- truncate --删除旧记录(用 truncate table 语句),替换成新装载的记录
-
when deptno <> 10 – 当deptno不为10的时候 可以插入
SQLLODER_EXPRESS
-
在sqlldr目录下创建两个以.dat为后缀名的文本文档
vi eemp.dat 1,a,100 2,b,200 3,c,300 vi eemp1.dat 1:a:100 2:b:200 3:c:300
-
在hr用户下创建两张表:
create table eemp(id number,name varchar2(10),salary number);
create table eemp1(id number,name varchar2(10),salary number); -
在sqlldr目录下执行两个命令开始导入
sqlldr hr/hr TABLE=eemp;
sqlldr hr/hr TABLE=eemp1; -
需要注意的是
- 命令行中的表名大小写一定要和操作系统上对应的文件名大小写一样,而且文件扩展名必须是.dat
- 数据文件内的数据分割必须是以逗号做分隔符。
- 表列必须是标量数据类型(字符,数字或日期时间)。