02июн
Большие объекты в СУРБД ORACLE. BFILE
Bfile - что это такое, как с этим работать?
Основные темы статьи:
Что такое BFILE?
Основные правила
Как организовать работу с внешними объектами
BFILE - это тип данных внешних больших объектов. Что это означает? Это означает, что данные этого типа представляют собой файлы операционной системы, содержащие неструктурированные двоичные данные. Двоичный неструктурированный – значит, что ORACLE не будет никак его преобразовывать ни с помощью какого-либо набора символов, ни с помощью какого либо формата. Это обязанность пользователя.
Файлы, поддерживаемые типом данных bfile, могут находиться где угодно в операционной системе. Доступ к внешним большим объектам реализуется через локаторы lob. Локатор внешнего lob – это символьная строка, представляющая собой полный путь к файлу.
Основные правила:
- Манипуляции с внешними объектами проводятся за рамками транзакции. То есть, Oracle не гарантирует целостность этих файлов.
- все операции с файлами, используемыми через тип данных BFILE , выполняются идентификатором пользователя операционной системы, который владеет каталогами ПЗ системы ORACLE.
Как работать с внешними большими объектами?
Работа с BFILE предполагает наличия в вашей базе данных специального объекта DIRECTORY. Это объект является псевдонимом каталога, где будут размещены ваши файлы.
Для работы с объектом directory у вас должны быть следующие привилегии: create any directory, drop any directory, read. К тому времени, как вы начнёте работать с внешними большими объектами, папка, на которую ссылается directory , уже должна существовать.
Работа с bfile предполагает следующие действия:
- Инициализацию большого объекта
- Манипулирование значениями большого объекта
Инициализация. Внешний большой объект может быть либо NULL , либо указывать на файл. Присвоить столбцу bfile значение null можно непосредственно оператором sql :
SQL> create table dbst_demo
2 ( id int primary key,
3 theBfile bfile);
Таблица создана.
SQL> insert into dbst_demo values(1,null);
1 строка создана.
Инициализировать столбец таблицы, атрибут объекта, переменную можно локатором bfile , указывающим на внешний файл:
SQL> create or replace directory my_files as 'C:\hs';
Каталог создан.
SQL> declare
2 l_bfile bfile;
3 begin
4 l_bfile := bfilename( 'MY_FILES', 'my_test.txt');
5 end;
6 /
Процедура PL/SQL успешно завершена.
Функция
bfilename (пакет standard) имеет два атрибута – название объекта directory и название внешнего файла.
function BFILENAME(directory varchar2,filename varchar2) return BFILE
А теперь попробуем поместить локатор внешнего lob в нашу таблицу.
SQL> drop table dbst_demo;
Таблица удалена.
SQL> create or replace directory my_files as 'C:\hs';
Каталог создан.
SQL> create table dbst_demo
2 ( id int primary key,
3 theBfile bfile);
Таблица создана.
SQL> declare
2 l_bfile bfile;
3 begin
4 insert into dbst_demo values(1,null);
5 l_bfile := bfilename( 'MY_FILES', 'my_test.txt');
6 insert into dbst_demo values(2,l_bfile);
7 commit;
8 end;
9 /
Процедура PL/SQL успешно завершена.
Вот так можно работать с типом Bfile. Только нужно осознать, что с фактическим значением внешнего Lob в приведенных примерах мы не работали. Мы манипулировали только локаторами.
Работать с внешними большими объектами можно с помощью пакета dbms_lob (см. нашу соответствующую статью).