现在准备把这个内容导入到数据库中hr下面的一张表:
create table emp_bak (employee_id number(7), last_name varchar2(25), hire_date date , salary number(10));
对于这个需求,问题的难点是字段和字段之间,没有好的分割符号,以及日期格式为中文格式,同时去掉了前导零,而sqlldr的日期格式为dd-mon-rr,为此,我们可以使用以下的控制文件格式进行装入:
控制文件为 /home/oracle/emp.ctl ,内容如下:
LOAD DATA APPEND INTO TABLE hr.emp_bak FIELDS TERMINATED BY X'09' ( EMPLOYEE_ID INTEGER EXTERNAL, LAST_NAME CHAR, HIRE_DATE DATE "fmYYYY/MM/DD" SALARY INTEGER EXTERNAL )
重点为: hire_date date "fmyyyy/mm/dd"
fm 为去前导零,yyyy/mm/dd 为和emp.dat的数据格式一样.
之后,就可以装载这个emp.dat数据入数据库了.具体为:
sqlldr hr/hr control=emp.CTL data=emp.dat log=emp1.log
验证一下,看emp_bak里面是否有数据:
select * from emp_bak;
|