Категория: Руководства
Управляющий файл SQL*Loader является текстовым файлом, который содержит инструкции языка определения данных (DDL). DDL используется, чтобы управлять следующими аспектами сеанса SQL*Loader:
Где SQL*Loader ищет данные для загрузки
Каким образом отформатированные данные должен ожидать SQL*Loader
Как SQL*Loader конфигурируется (включая управление памятью, критерии выборки и исключений, обработка прерванной загрузки и так далее), когда он загружает данные
Как SQL*Loader управляет загружаемыми данными
Объяснение этого демонстрационного управляющего файла (по номерам строк) следующее:
Комментарии могут вставляться где угодно в разделе команд файла, но они не должны появиться в данных. Любой комментарий предваряется двумя дефисами. Весь текст справа от двойного дефиса игнорируется до конца строки.
Оператор LOAD DATA указывает SQL*Loader, что это - начало новой загрузки данных. Если Вы продолжаете загрузку, которая была прервана в процессе работы, используйте оператор CONTINUE LOAD DATA.
Ключевое слово INFILE определяет имя файла данных, содержащего данные, которые Вы хотите загрузить.
Ключевое слово BADFILE определяет имя файла, в который помещаются исключенные записи.
Ключевое слово DISCARDFILE определяет имя файла, в который помещаются забракованные записи.
Ключевое слово APPEND является одной из опций, которые можно использовать, загружая данные в таблицу, которая не пуста. Чтобы загрузить данные в таблицу, которая пуста, используйте ключевое слово INSERT.
Ключевое слово INTO TABLE позволяет Вам идентифицировать таблицы, поля и типы данных. Оно определяет отношение между записями в файле данных и таблицами в базе данных.
Предложение WHEN определяет одно или более условий на поля, которым должна соответствовать каждая запись прежде, чем SQL*Loader загрузит данные. В этом примере SQL*Loader загружает запись, только если 57-ой символ является десятичной точкой. Эта десятичная точка разграничивает доллары и центы в поле и заставляет исключать записи, у которых поле SAL не имеет значения.
Предложение TRAILING NULLCOLS указывает SQL*Loader обрабатывать любые относительно расположенные столбцы, которые отсутствуют в записи, как нулевые столбцы.
Остаток управляющего файла содержит cписок полей, предоставляющих информацию о форматах столбцов в таблице, которая загружается.
www.ПЕРВЫЕ ШАГИ.ru. Шаг 138 - БД Oracle - SQL*Loader Способы загрузки - ЧАСТЬ II
С фиксированной длинной все ясно, но что я не припомню, чтобы мне где-то
попадались, такие данные, да и вам такое может понадобиться редко! Поверь те
мне, если только в особых случаях. Как правило, я всегда работал и работаю с
данными переменной длинны! И вот как. Очень неплохим и полезным средством для
загрузки разнообразных данных в Oracle. как это ни странно, является
MS Access. Да, вы будете смеяться, но это так! В нем есть очень забавная
формировалка экспорта данных, в текстовом формате с разделителями! Вот этот
механизм, мне очень помогает! Я сгружаю в MS Access разнообразные
xls. dbf. mdb и т.д. А, на выходе получаю стройные ряды
текстовых файлов для загрузки в Oracle. Все просто замечательно! Итак,
что-то я разболтался! Давайте снова зальем данные в таблицу PRODUCTS для
чего снова ее вычистим:
Сечас можете взять файлы из прошлого шага или
сделать новые, как вам больше нравиться, но я все пройду до конца, чтобы вы не
путались! Файл PRODUCTS.bat можно оставить без изменений, а вот два
других будем переделывать! Для начала контрольный файл переписываем вот так:
Здесь FIELDS TERMINATED BY ';' означает, что границы данных определены
по символу "; ", а OPTIONALLY ENCLOSED BY '"' определяет, что
данные могут содержать символ обрамления. TRAILING NULLCOLS говорит о
том, что если поле для загрузки не имеет данных в файле данных, то в поле
записать NULL. Далее идет просто описание полей и все! А, вот
PRODUCTS.dat будет иметь следующее содержимое:
Видите данные отделены символом ";" друг от друга и все! Естественно, откуда
я знаю все эти позиции, так гораздо проще и быстрее! А, если записей скажем
миллион или десять! А. ) Запускаем файл загрузки на исполнение и получаем
следующее:
Ничего нового вроде нет! И содержимое таблицы тоже самое, что и в первом случае. Смотрим:
А, вот содержимое файла журнала уже другое, как и следовало ожидать:
Обратите внимание, что поля PRICE. QTY_ON_HAND обозначены как
CHARACTER. а в реальной таблице они имеют другой тип! Именно здесь и
сработало неявное преобразование. Вот так грузятся данные переменной длинны. Еще
один способ, загрузки носит название - загрузка вложенных данных. Давайте
рассмотрим его. Итак, для начала очистим нашу учебную табличку:
Теперь слейте вместе файлы PRODUCTS.ctl и PRODUCTS.dat ,
например, вот так:
Затем смените расширение файла PRODUCTS.txt на PRODUCTS.ctl и
отредактируйте его содержимое вот так:
Здесь слово BEGINDATA означает начала блока загружаемых данных. В
данном случае контрольный файл выполняет двойную функцию и описывает правила
загрузки и несет данные для нее! Если вам такой способ кажется более удачным,
можете его использовать, если нет, то это как вам удобнее. Обратите так же
внимание, что после ключевого слова INFILE стоит просто знак "*".
Содержимое журнала после такой загрузки будет такое:
Отличие только в записи файла данных, все остальное, так же как и в прошлый раз. Для
примера можете попробовать загрузку с опциями загрузки для таблиц, например
TRUNCATE. Удачи. )
Текущий рейтинг темы: Нет
Пример использования Oracle SQL*Loader
Очень часто возникает потребность загрузить в СУБД Oracle какие-нибудь данные из текстовых или бинарных файлов.
Часто программисты для решения этой задачи разрабатывают свои средства, не догадываясь, что в Oracle уже есть мощный инструмент, специально разработанный для импорта данных из файлов. Этот инструмент называется - SQL*Loader .
Цель этого очерка познакомить читателя с основными приемами работы с SQL*Loader .
За более детальной информацией обращайтесь к документации.
Итак, допустим нам надо импортировать данные из такого вот файла.
Файл состоит из шапки и строк с данными.Данные будем импортировать в эту таблицу:
Утилита SQL*Loader запускается следующей строкой:
Как видите, SQL*Loader - это мощное средство СУБД Oracle, которое позволяет решить большинство типовых задач импорта данных.
Внимание.
Комментировать могут только зарегистрированные пользователи.
Возможно использование следующих HTML тегов: <a>, <b>, <i>, <br>.
Sqlldr как подгрузить .cvs [new]
Откуда: Самара
Сообщений: 489
CREATE TABLE "SYSTEM"."IMEI_IC"
( "IMEI" VARCHAR2(20 CHAR) NOT NULL ENABLE,
"MODEL" VARCHAR2(100 CHAR),
"N_DOC" VARCHAR2(100 CHAR),
"DATA_H" VARCHAR2(100 CHAR),
"INICIATOR" VARCHAR2(100 CHAR),
"DATA_P" VARCHAR2(100 CHAR),
CONSTRAINT "IMEI_IC_PK" PRIMARY KEY ("IMEI")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "SYSTEM" ENABLE
) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "SYSTEM" ;
и файл .exel который конвертирую в .cvs
Названия столбцов идентичны (в exel и oracle)
Ну сколько не бился, ну не получается создать управляющий файл с логом. не грузится.
Подскажите пожалуйста.
конекчуть батником вида
sqlldr userid=system/pass@imeidb control=exel.txt
LOAD DATA
INFILE 'C:\1.csv'
BADFILE 'C:\2.bad'
INTO TABLE IMEI_IC INSERT
FIELDS TERMINATED BY ','
TRAILING NULLCOLS
(IMEI, MODEL, N_DOC, DATA_H, INICIATOR, DATA_P)
Откуда: Самара
Сообщений: 489
конект ОК,
но результат следующий
SQL*Loader: Release 11.2.0.2.0 - Production on Пн Дек 15 16:38:48 2014
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
Control File: control.txt
Data File: C:\1.csv
Bad File: C:\2.bad
Discard File: none specified
(Allow all discards)
Number to load: ALL
Number to skip: 0
Errors allowed: 50
Bind array: 64 rows, maximum of 256000 bytes
Continuation: none specified
Path used: Conventional
Table IMEI_IC, loaded from every logical record.
Insert option in effect for this table: INSERT
TRAILING NULLCOLS option in effect
Column Name Position Len Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
IMEI FIRST *. CHARACTER
MODEL NEXT *. CHARACTER
N_DOC NEXT *. CHARACTER
DATA_H NEXT *. CHARACTER
INICIATOR NEXT *. CHARACTER
DATA_P NEXT *. CHARACTER
SQL*Loader-601: For INSERT option, table must be empty. Error on table IMEI_IC
Откуда: Самара
Сообщений: 489
SQL*Loader: Release 11.2.0.2.0 - Production on Пн Дек 15 16:58:40 2014
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
Control File: control.txt
Data File: C:\2.csv
Bad File: C:\55.bad
Discard File: none specified
(Allow all discards)
Number to load: ALL
Number to skip: 0
Errors allowed: 50
Bind array: 64 rows, maximum of 256000 bytes
Continuation: none specified
Path used: Conventional
Table IMEI_IC, loaded from every logical record.
Insert option in effect for this table: INSERT
TRAILING NULLCOLS option in effect
Column Name Position Len Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
IMEI FIRST *. CHARACTER
MODEL NEXT *. CHARACTER
N_DOC NEXT *. CHARACTER
DATA_H NEXT *. CHARACTER
INICIATOR NEXT *. CHARACTER
DATA_P NEXT *. CHARACTER
Record 38: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)
Record 62: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)
Record 63: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)
Record 64: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)
Record 65: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)
Record 66: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)
Record 67: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)
Record 68: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)
Record 69: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)
Record 70: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)
Record 71: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)
Record 72: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)
Record 73: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)
Record 74: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)
Record 75: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)
Record 76: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)
Record 77: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)
Record 78: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)
Record 79: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)
Record 81: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)
Record 90: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)
Record 94: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)
Record 101: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)
Record 102: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)
Record 103: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)
Record 104: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)
Record 105: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)
Record 106: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)
Record 107: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)
Record 108: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)
Record 109: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)
Record 110: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)
Record 111: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)
Record 112: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)
Record 113: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)
Record 114: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)
Record 115: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)
Record 116: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)
Record 117: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)
Record 118: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)
Table IMEI_IC:
84 Rows successfully loaded.
40 Rows not loaded due to data errors.
0 Rows not loaded because all WHEN clauses were failed.
0 Rows not loaded because all fields were null.
Space allocated for bind array: 99072 bytes(64 rows)
Read buffer bytes: 1048576
Total logical records skipped: 0
Total logical records read: 124
Total logical records rejected: 40
Total logical records discarded: 0
Run began on Пн Дек 15 16:58:40 2014
Run ended on Пн Дек 15 16:58:40 2014
Elapsed time was: 00:00:00.23
CPU time was: 00:00:00.08
Пример использования Oracle SQL*Loader
Очень часто возникает потребность загрузить в СУБД Oracle какие-нибудь данные из текстовых или бинарных файлов.
Часто программисты для решения этой задачи разрабатывают свои средства, не догадываясь, что в Oracle уже есть мощный инструмент, специально разработанный для импорта данных из файлов. Этот инструмент называется - SQL*Loader .
Цель этого очерка познакомить читателя с основными приемами работы с SQL*Loader .
За более детальной информацией обращайтесь к документации.
Итак, допустим нам надо импортировать данные из такого вот файла.
Файл состоит из шапки и строк с данными.Данные будем импортировать в эту таблицу:
Утилита SQL*Loader запускается следующей строкой:
Как видите, SQL*Loader - это мощное средство СУБД Oracle, которое позволяет решить большинство типовых задач импорта данных.
Внимание.
Комментировать могут только зарегистрированные пользователи.
Возможно использование следующих HTML тегов: <a>, <b>, <i>, <br>.