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 могут обрабатывать одну и ту же запись по-разному, позволяя распознавать несколько форматов в одном входном файле.
Комментариев нет:
Отправить комментарий