![]() |
|
Программирование >> Oracle
Загрузка данных 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) Именно это и требовалось. Теперь, допустим, необходимо загрузить входной файл с фиксированным количеством элементов в каждом массиве. Например, имеется иденти- ![]()
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |