Большие объекты в СУРБД ORACLE. BFILE

dbstalker, 02 июня

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 (см. нашу соответствующую статью).

2 комментария

Прокоментировать

Андрей
24 декабря 2010 г. в 12:21

Большое Спасибо!
По человечески всё написано и понятно :))
Читаю дальше

Имя
24 января 2013 г. в 18:36

Спасибо! Коротко и понятно.

 

Новый комментарий

Я не спамер: введите суму 1+5



 

От авторов блога

О Блоге - прочитай перед началом.

Задать вопрос и получить ответ - уже решено 94 вопросов

Глоссарий - список терминов и сокращений


 
 

Бизнес форум

Последние темы:

Шины бу
26 апреля, 2 ответа
Потрібна порада
25 апреля, 2 ответа
Посоветуйте адвоката
25 апреля, 1 ответа