Что-же давайте после целой кучи теории, наконец, перейдем к практике! Для начала рассмотрим загрузку данных фиксированной длинны. Это означает, что SQL*Loader будет рассматривать каждую строку в соответствии с положением символа в ней! Для начала давайте очистим от данных, таблицу PRODUCTS тем более, что я наделал там кучу ошибок - за одно и их исправим! Итак, запускаем SQL*Plus и вводим команды (схема MILLER пароль KOLOBOK!):
DELETE FROM PRODUCTS / COMMIT /
Получаем:
SQL> DELETE FROM PRODUCTS 2 / 25 строк удалено. SQL> COMMIT 2 / Фиксация обновлений завершена.
Затем в подкаталоге C:\Oracle\ora81\bin создаем подкаталог LOAD (как на ваше усмотрение, например, md LOAD). Заходим в этот каталог и создаем в нем файл PRODUCTS.bat вот с таким содержимым:
set nls_lang=russian_cis.ru8pc866 sqlldr.exe userid=miller/kolobok@proba control=PRODUCTS.ctl errors=100 bad=PRODUCTS.bad
Теперь самое интересное! Создаем файл загрузки для считывания данных фиксированной длинны PRODUCTS.ctl. Он будет иметь вот такое содержание:
LOAD DATA INFILE 'PRODUCTS.DAT' INTO TABLE PRODUCTS ( MFR_ID POSITION(01:03) CHAR, PRODUCT_ID POSITION(04:10) CHAR, DESCRIPTION POSITION(11:31) CHAR, PRICE POSITION(32:36) INTEGER EXTERNAL, QTY_ON_HAND POSITION(37:39) INTEGER EXTERNAL )
Помните прошлый шаг? Все правила соблюдены для загрузки данных! А ключевое слово POSITION читает данные согласно заданных значений! Далее там же создаем файл PRODUCTS.dat с вот таким содержимым:
REI2A45C Бочка металлическая 79 210 ACI4100Y Коробка картонная 2750 25 QSAXK47 Труба алюминиевая 355 38 BIC41672 Тарелка фарфоровая 180 0 IMM779C Профиль специальный 1875 9 ACI41003 Рейка деревянная 107 207 ACI41004 Рейка пластмассовая 117 139 BIC41003 Стекломасс рулоны 652 3 IMM887P Рубероид рулоны 250 24 QSAXK48 Гвоздь длинный 134 203 REI2A44L Доска профильная 4500 12 FEA112 Стол офисный 148 115 IMM887H Тумбочка прикроватная54 223 BIC41089 Сапоги юфтевые 225 78 ACI41001 Лампа настольная 55 277 IMM775C Осветитель ртутный 1425 5 ACI4100Z Монитор LG 2500 28 QSAXK48A Подушка ватная 177 37 ACI41002 Носки черные 76 167 REI2A44R Телевизор SAMSUNG 4500 12 IMM773C Наушники SONY 975 28 ACI4100X Карандаш простой 25 37 FEA114 Электродвигатель 243 15 IMM887X Нож специальный 475 32 REI2A44G Бочка пластмассовая 350 14
Здесь имеются позиции загрузки 01:03, 04:10, 11:31, 32:36, 37:39, если что-то не верно, то можете проверить сами. Это просто позиции знаков в строке отсюда и название загрузка данных, фиксированной длинны. Итак, наши файлы готовы, таблица пустая можно приступать к загрузке! Запустите PRODUCTS.bat на исполнение и получите следующее сообщение в командной строке:
C:\Oracle\ora81\bin\LOAD>set nls_lang=russian_cis.ru8pc866 C:\Oracle\ora81\bin\LOAD>sqlldr.exe userid=miller/kolobok@proba control=PRODUCTS.ctl errors=100 bad=PRODUCTS.bad SQL*Loader: Release 8.1.5.0 - Production on Вск Май 16 14:13:34 1004 Copyright (c) 1881, 1001, Oracle Corporation. All rights reserved. Достигнута точка фиксации - счетчик логич. записей 27
А, вот теперь заглянем в табличку PROCDUCTS, выполнив такой простой запрос к таблице PRODUCTS:
SELECT * FROM PRODUCTS /
Получаем:
SQL> SELECT * FROM PRODUCTS 2 / MFR_ID PRODUCT_ID DESCRIPTION PRICE QTY_ON_HAND ------ ---------- --------------------- ---------- ------------ REI 2A45C Бочка металлическая 79 210 ACI 4100Y Коробка картонная 2750 25 QSA XK47 Труба алюминиевая 355 38 BIC 41672 Тарелка фарфоровая 180 0 IMM 779C Профиль специальный 1875 9 ACI 41003 Рейка деревянная 107 207 ACI 41004 Рейка пластмассовая 117 139 BIC 41003 Стекломасс рулоны 652 3 IMM 887P Рубероид рулоны 250 24 QSA XK48 Гвоздь длинный 134 203 REI 2A44L Доска профильная 4500 12 FEA 112 Стол офисный 148 115 IMM 887H Тумбочка прикроватная 54 223 BIC 41089 Сапоги юфтевые 225 78 ACI 41001 Лампа настольная 55 277 IMM 775C Осветитель ртутный 1425 5 ACI 4100Z Монитор LG 2500 28 QSA XK48A Подушка ватная 177 37 ACI 41002 Носки черные 76 167 REI 2A44R Телевизор SAMSUNG 4500 12 IMM 773C Наушники SONY 975 28 ACI 4100X Карандаш простой 25 37 FEA 114 Электродвигатель 243 15 IMM 887X Нож специальный 475 32 REI 2A44G Бочка пластмассовая 350 14 25 строк выбрано.
Сразу замечу, если вместо русских букв у вас будут вражеские кабалистические символы, нужно все проделать снова, но файл PRODUCTS.dat открыть при помощи Microsoft Word и сохранить его в формате Text DOS(!) И тогда все получится! Не знаю как у вас, а у меня этот фокус прокатывал обычно! И последнее взглянем на содержимое файла журнала PRODUCTS.log:
SQL*Loader: Release 8.1.5.0.0 - Production on Вск Май 16 14:23:34 2004 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. Управляющий файл: PRODUCTS.ctl Файл данных: PRODUCTS.DAT Файл плохих записей: PRODUCTS.bad Файл удаленных записей: ничего не задано (Разрешить удалять все записи) Количество записей для загрузки: ALL Количество записей для пропуска: 0 Допускается ошибок: 100 Массив привязки:64 строк, макс. из 256000 байт Продолжение: ничего не задано Использован маршрут: Условный Таблица PRODUCTS, загружен из каждой логической записи. Режим вставки действует для этой таблицы: INSERT Действует опция TRAILING NULLCOLS Имя столбца Позиция Дл. Огр. Вкл Тип данных ------------------------------ ---------- ----- ---- ---- --------------------- MFR_ID 1:3 3 ; O(") CHARACTER PRODUCT_ID 4:10 7 ; O(") CHARACTER DESCRIPTION 11:31 21 ; O(") CHARACTER PRICE 32:36 5 ; O(") CHARACTER QTY_ON_HAND 37:39 3 ; O(") CHARACTER Запись 26: Удалена - все столбцы пустые. Запись 27: Удалена - все столбцы пустые. Таблица PRODUCTS: 25 Строки успешно загружено. 0 Строки не загружены из-за ошибки в данных. 0 Строки не загружены из-за сбоев во всех фразах WHEN. 2 Строки не загружены из-за того, что все поля были пусты. Для массива привязки отведено: 3456 байт(64 строк) Байтов буфера чтения: 1048576 Всего пропущено логических записей: 0 Всего прочитано логических записей: 27 Всего забраковано логических записей: 0 Всего удалено логических записей: 2 Прогон начался в Вск Май 16 14:23:34 2004 Прогон кончился в Вск Май 16 14:23:36 2004 Общее время: 00:00:02.31 Процессорное время: 00:00:00.01
Думаю, особых комментариев не нужно, здесь хорошо отражена вся сессия, загрузки данных и все что происходило при загрузке. В том числе и позиции загрузки данных в таблицу. Вот таким образом производиться загрузка данных в БД Oracle фиксированной длинны! Если, что кому не понятно спрашивайте! Или разбирайтесь сами! :)