Выбрать главу

этом разделе. Следующие выражения UPDATE демонстрируют, как можно

изменить содержимое CL0B и BLOB:

□ UPDATE c lo b _ c o n t e n t

SET c lo b _ c o lum n = T 0 _ C L 0 B ( ‘ What l i g h t th ro u g h y o n d e r window b r e a k s ’ )

WHERE i d = 1;

UPDATE b lo b _ c o n t e n t

SET b lo b _ c o lumn = T0_BL0B(‘1110011010101011111’)

WHERE i d = 1;

Вы также можете инициализировать локатор L0B, но не сохранить данные

в L0B. Это делается при помощи функции EMPTY_CL0B() для хранения

пустого CL0B и функции EMPTY_BL0B() для хранения пустого BL0B:

П INSERT INTO c lo b _ c o n t e n t (

i d , c lo b _ c o lum n

) VALUES (

3, EMPTY_CL0B()

);

INSERT INTO b lo b _ c o n t e n t (

i d , blo b _ co lumn

) VALUES (

3, EMPTY_BL0B()

);

Эти выражения инициализируют локатор L0B, но данные L0B при этом

пусты.

Вы также можете использовать EMPTY_CL0B() и EMPTY_BL0B() в выражениях

UPDATE для очистки данных L0B. Например:

□ UPDATE c lo b _ c o n t e n t

SET c lo b _ c o lum n = EMPTY_CL0B()

Большие объекты 497

WHERE id = 1;

UPDATE blob_content

SET blob_column = EMPTY_BLOB()

WHERE id = 1;

Если вы запускали любые из показанных в этом разделе выражений

INSERT или UPDATE, откатите изменения, чтобы ваши результаты совпадали

с моими в следующих разделах главы:

П ROLLBACK;

Использование BFILE

Тип BFILE позволяет хранить указатели на файлы, которые доступны для

файловой системы сервера базы данных. Следует отметить один важный

момент: эти файлы расположены вне базы данных. Данные типа BFILE могут

указывать на файлы, размещенные на любых носителях: на жестких

дисках, на CD, DVD, Blu-Ray, HD-DVD и т. п.

Примечание BFILE содержит указатель на внешний файл. Сам по себе файл не хранится в

базе данных, в ней хранится только указатель на него. Файл должен быть доступен для файловой

системы сервера базы данных.

Создание объекта-каталога

Прежде чем записать в столбец BFILE указатель на файл, нужно создать в

базе данных объект-каталог (directory object), который будет представлять

тот каталог файловой системы, куда будут записываться файлы. Объект-

каталог создается при помощи оператора CREATE DIRECTORY. Для выполнения

такого оператора нужно обладать полномочиями базы данных CREATE

ANY DIRECTORY.

Следующий пример (содержится в lob_schema.sql) создает объект-каталог

SAMPLE_FILES_DIR, соответствующий каталогу файловой системы С:\

sample_files:

□ CREATE DIRECTORY SAMPLE_FILES_DIR AS 'C:\sample_files';

Примечание Операционная система Windows использует при записи каталогов символ обратного

слэша (\), в то время как Linux и Unix - символ прямого слэша (/). Также, если ваша

папка sample_directory хранится не на разделе С, в предыдущем примере вам нужно указать

соответствующий путь.

При создании объекта-каталога нужно убедиться в том, что

■ в файловой системе существует указанный каталог;

■ учетная запись пользователя, использованная для установки программного

обеспечения Oracle, обладает полномочиями для чтения

из этого каталога и для любого файла, на который может указать

строка из столбца типа BFILE в базе данных.

При использовании Windows не нужно беспокоиться о выполнении

второго пункта. Программное обеспечение Oracle устанавливается с помощью

учетной записи пользователя, которая имеет административные

498 Глава 14

полномочия, и такая учетная запись обладает полномочиями для чтения

любого файла операционной системы. При использовании Linux или

Unix можно предоставить для соответствующей пользовательской учётной

записи Oracle, которая владеет базой данных, доступ на чтение физического

каталога и к файлам, используя, например, команду chmod.

Заполнение столбца B F ILE указателями на ф айлы

Поскольку BFILE - это всего лишь указатель на внешний файл, заполнение

столбца BFILE не представляет труда. Для заполнения столбца BFILE указателем

на внешний файл нужно лишь использовать функцию базы данных

Oracle BFILENAMEO. Эта функция принимает два параметра: имя объекта-

каталога базы данных и имя файла.

Следующий оператор INSERT добавляет строку в таблицу bfile_content,

используя функцию BFILENAMEO для заполнения столбца bfile_column указателем

на файл textContext.txt:

□ INSERT INTO b f i l e _ c o n t e n t (

id ,

b f i l e _ c o lum n

) VALUES ( ' *

1 ,

BFILENAMEO SAMPLE_FILES_DIR’ , ‘ t e x t C o n t e n t . t x t ’ )

);

Следующий оператор INSERT добавляет строку в таблицу b f i l 6 _ c o n t e n t ,

используя функцию BFILENAMEO для заполнения столбца b f i l e _ c o lu m n указателем

на файл binaryContent.doc:

□ INSERT INTO b f i l e _ c o n t e n t (

id ,

b f i le _ c o lum n

) VALUES (

2 ,

BFILENAMEO SAMPLE_FILES_DIR’ , ‘ b i n a r y C o n t e n t . d o c ’ )

);

Следующий запрос пытается получить строки из таблицы b f i l e _ c o n t e n t ,