Программирование >>  Oracle 

1 ... 156 157 158 [ 159 ] 160 161 162 ... 469


Загрузка данных

Name

Null?

Type

SOURCE HEIGHT

WIDTH

CONTENTLENGTH

ORDSOURCE

NUMBER(38) NUMBER(38) NUMBER(38)

ops$tkyte@ORA8I.WORLD> Name

desc ordsys.ordsourca

Null?

Type

LOCALDATA

SRCTYPE

SRCLOCATION

BLOB

VARCHAR2 (4000) VARCHAR2(4000)

Управляющих файл для загрузки может выглядеть так:

LOAD DATA

INFILE *

INTO TABLE image load REPLACE

FIELDS TERMINATED BY , (ID,

file ne FILLER, IMAGE column object

SOURCE column object

LOCALDATA LOBFILE (file name)

NULLIF file name

TERMINATED BY EOF

= HONE

BEGINDATA 1,icons,icons.gif

В нем я добавил две новые конструкции:

COLUMN OBJECT. Этот тип поля сообщает SQLLDR, что задано не имя стол-

бца, а часть имени. Она не сопоставляется с полем файла данных, а используется для построения корректных ссылок на столбцы объекта при загрузке. В представленном примере есть два вложенных признака объекта. Поэтому будет использоваться имя столбца IMAGE.SOURCE.LOCALDATA, что и требуется. Обратите внимание, что мы не загружаем никакие другие атрибуты этих объектных типов, например IMAGE.HEIGHT, IMAGE.CONTENTLENGTH, IMAGE.SOURCE.SRCTYPE. Ниже мы увидим, как задать их значения.

NULLIF FILE NAME = NONE. Эта конструкция требует от SQLLDR загружать Null в объектный столбец, если поле FILE NAME содержит слово NONE.

После загрузки в столбцы interMedia-типов необходимо выполнить завершающую обработку загруженных данных с помощью PL/SQL, чтобы компонент interMedia мог с





Глава 9

ними работать. Например, в нашем случае, вероятно, понадобится выполнить следующую обработку для корректной установки соответствующих свойств изображений:

begin

for с in (select * from image load) loop cimage.setproperties;

end loop ; end; /

SETPROPERTIES - это метод объекта, предоставляемый типом ORDSYS.ORDIMAGE,

который обрабатывает изображение и изменяет соответственно остальные атрибуты объекта. Подробнее обработка изображений в interMedia описана в главе 17.

Загрузка массивов переменной длины и вложенных таблиц с помощью SQLLDR

Теперь давайте рассмотрим, как с помощью утилиты SQLLDR загружать массивы переменной длины и вложенные таблицы. Массивы переменной длины и вложенные таблицы (с этого момента мы будем называть их массивами) будут задаваться во входном файле следующим образом.

В файл данных включается дополнительное поле. Оно будет содержать количество элементов массива, которые должны быть в файле данных. Поле не загружается, а используется утилитой SQLLDR для определения количества элементов в загружаемом массиве.

Затем указывается поле или набор полей, задающих элементы массива.

Итак, предполагается, что массивы переменой длины в файле данных снабжены дополнительным полем количества элементов, за которым следуют сами элементы. Можно также загружать массивы данных с одинаковым, фиксированным количеством элементов в каждой записи (например, в каждой входной записи - пять элементов массива). Мы рассмотрим оба метода на базе представленного ниже типа:

tkyte@TKYTE816> create type myArrayType

2 as varray(10) of number(12,2)

Type created.

tkyte@TKYTE816> create table t

2 (x int primary key, у Array Type)

Table created.

Это схема, в которую будут загружаться данные. А вот пример управляющего файла сданными, который можно использовать для загрузки. Он демонстрирует загрузку массивов с переменным количеством элементов. Каждая входная запись будет иметь формат:

Значение х.



Загрузка данных 509

Количество элементов в у.

Поля, содержащие отдельные элементы у. LOAD DATA

INFILE *

INTO TABLE t

replace

fields terminated by ,

y cnt FILLER,

у varray count (ycnt)

BEGINDATA 1,2,3,4

2,10,1,2,3,4,5,6,7,8,9,10 3,5,5,4,3,2,1

Обратите внимание, что использовано ключевое слово FILLER, позволяющее присвоить значение поля переменной Y CNT, не загружая его. Также использована конструкция VARRAY COUNT (Y CNT), сообщающая SQLLDR, что у имеет тип VARRAY. Если бы поле Y представляло собой вложенную таблицу, пришлось бы использовать конструкцию NESTED TABLE COUNT(Y CNT). Учтите также, что это - ключевые слова SQLLDR, а не функции SQL, поэтому для связываемых переменных не используются кавычки или двоеточия, как при ссылке на них в функции SQL.

Ключевым элементом является конструкция COUNT. Она позволяет получить значение загружаемого массива. Например, получив следующую строку данных:

1,2,3,4

мы разбираем ее так:

1 сопоставляется с х - первичным ключом;

2 сопоставляется с y cnt - количеством элементов массива;

3,4 сопоставляется с у - элементами массива. После запуска SQLLDR получим: tkyte@TKrE816> select * om t;

1 MYARRAYTYPE (3, 4)

2 MYARRAYTYPE(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

3 MYARRAYTYPE(5, 4, 3, 2, 1)

Именно это и требовалось. Теперь, допустим, необходимо загрузить входной файл с фиксированным количеством элементов в каждом массиве. Например, имеется иденти-




1 ... 156 157 158 [ 159 ] 160 161 162 ... 469

© 2006 - 2025 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика