Шаг 137 - БД Oracle - SQL*Loader Способы загрузки данных в БД

Что-же давайте после целой кучи теории, наконец, перейдем к практике! Для начала рассмотрим загрузку данных фиксированной длинны. Это означает, что 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 фиксированной длинны! Если, что кому не понятно спрашивайте! Или разбирайтесь сами! :)


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Летучий Сергей - 16.05.2004