Create table emp (id varchar2(22), name varchar2(85),hire_date date,department_id varchar2(3));
create table emp_epfo as select id emp_id,name lname,hire_date,department_id dept_id from emp where 1=2;
控制文件
LOAD DATA
INFILE '/image/ExtTableData/OnlineClaims/member_master.csv'
TRUNCATE
INTO TABLE EMP
FIELDS TERMINATED BY ","
(ID ,NAME ,
HIRE_DATE ,DEPARTMENT_ID)
INTO TABLE EMP_EPFO
FIELDS TERMINATED BY ","
TRAILING NULLCOLS
(EMP_ID,LNAME,HIRE_DATE,DEPT_ID)
您可以使用单个控制文件将数据加载到使用
SQLLDR
的多个表中。你需要记住的是,
LOAD DATA
INFILE '/image/ExtTableData/OnlineClaims/member_master.csv'
TRUNCATE
INTO TABLE EMP
FIELDS TERMINATED BY ","
TRAILING NULLCOLS
(ID POSITION(1),
NAME,
HIRE_DATE,
DEPARTMENT_ID
)
INTO TABLE EMP_EPFO
(EMP_ID POSITION(1),
LNAME,
HIRE_DATE,
DEPT_ID
)
在单独表的列后指定
POSITION(1)
的原因是指示Oracle从第一行开始读取数据。
引用自 Oracle 文档:
不使用POSITION参数时,多个INTO TABLE子句 处理相同(分隔数据)输入记录的不同部分, 允许从一个记录加载多个表。当。。。的时候 使用POSITION参数,多个INTO TABLE子句可以处理 以不同的方式记录相同的记录,允许多种格式 在一个输入文件中识别。