Пример использования Oracle SQL*Loader
Статьи про Oracle -> Администрирование
Пример использования Oracle SQL*Loader
v:1.0 25.10.2010
Петрелевич Сергей
Очень часто возникает потребность загрузить в СУБД Oracle какие-нибудь данные из текстовых или бинарных файлов.
Часто программисты для решения этой задачи разрабатывают свои средства, не догадываясь, что в Oracle уже есть мощный инструмент,
специально разработанный для импорта данных из файлов. Этот инструмент называется - SQL*Loader.
Цель этого очерка познакомить читателя с основными приемами работы с SQL*Loader.
За более детальной информацией обращайтесь к документации.
Итак, допустим нам надо импортировать данные из такого вот файла.
Id void1 void2 text value1 value2 file 10;0;05Apple;valid1;1;10;jpg\a1.jpg 20;0;07Orange;valid2;2;20;jpg\a2.jpg 30;0;06Lemon;valid3;3;30;jpg\a3.jpg
Причем, нам надо импортировать не просто так, а выполнив определенные правила:
- импортировать все, кроме строк с Id=20;
- импортировать поля Id, text;
- пропустить поля void1, void2;
- вместо полей value1 и value2 импортировать их сумму, т.е. value1+value2;
- импортировать бинарный файл, имя которого находится в поле file.
Данные будем импортировать в эту таблицу:
create table tLoader ( id number primary key, char_data varchar2(30), val number, image_data blob );
sqlldr userid=scott/scott@dbstart control=control.txt log=loader.log
- scott/scott@dbstart - типовая строка подключения к базе;
- control.txt - этот так называемый управляющий файл;
- loader.log - это файл логирования процесса загрузки.
Кроме того, в этом файле можно описать и требования, предъявленные к процессу импорта.
Вот текст файла:
options (skip=1) load data characterset CL8MSWIN1251 infile 'example.dat' badfile 'example.bad' discardfile 'example.dis' replace into table tLoader when id<>'20' fields terminated by ';' optionally enclosed by '"' ( id INTEGER EXTERNAL, void1 FILLER char, void2 FILLER char, char_data char, value1 BOUNDFILLER, val ":val+:value1", blob_filename BOUNDFILLER, image_data LOBFILE(blob_filename) TERMINATED BY EOF )
- options (skip=1) - указание пропустить первую строку файла (заголовок);
- load data characterset CL8MSWIN1251 - задание кодировки файла данных;
- infile 'example.dat' - файл с исходными данными;
- badfile 'example.bad' - в этот файл запишутся данные, которые не были импортированы по причине ошибок, например, строка в поле типа number;
- discardfile 'example.dis' - в этот файл попадут строки, которые не соответствуют условию загрузки, в нашем случае здесь будет строка с id=20;
- Replace - говорит о том, что если в таблице уже есть данные, их надо заменить;
- into table tLoader when id<>'20' - указание имени таблицы и условия фильтрации данных;
- fields terminated by ';' optionally encosed by '"' - поля разделяются символом ";", и могут содержать кавычки;
- поле Id - целое число;
- поля void1 и void2 пропускаем;
- поле char_data помещаем в таблицу;
- Поле value1 пропускаем, но значение запоминаем;
- Значение val получаем как сумму значения текущего поля и предыдущего, которое запомнили;
- Имя файла blob_filename зачитываем и сохраняем и выполняем загрузку image_data LOBFILE(blob_filename) TERMINATED BY EOF бинарного фалйа.
Как видите, SQL*Loader - это мощное средство СУБД Oracle, которое позволяет решить большинство типовых задач импорта данных.
Метки: Импорт/Экспорт данных
Внимание.
Комментировать могут только зарегистрированные пользователи.
Возможно использование следующих HTML тегов: <a>, <b>, <i>, <br>.