BFILE в Oracle

Поставщик данных .NET Framework для Oracle содержит класс OracleBFile, который используется для работы с типом данных Oracle BFile.

Тип данных Oracle BFILE — это бизнес-тип Oracle, содержащий ссылку на двоичные данные с максимальным размером 4 гигабайта. Oracle BFILE отличается от других типов данных Oracle LOB в том, что его данные хранятся в физическом файле в операционной системе, а не на сервере. Обратите внимание, что тип данных BFILE предоставляет доступ только для чтения к данным.

Другие характеристики типа данных BFILE , отличающие его от бизнес-типа данных, являются следующими:

  • содержит неструктурированные данные;

  • поддерживает обработку данных на сервере в виде фрагментов;

  • использует ссылочную семантику копирования. Например, при выполнении операции копирования в BFILE копируется только указатель BFILE (который является ссылкой на файл). Данные файла не копируются.

Тип данных BFILE должен использоваться для ссылок на бизнес-объекты, которые имеют большой размер, и поэтому не является практическим для хранения в базе данных. Дополнительные затраты на клиент, сервер и обмен данными участвуют при использовании типа данных BFILE по сравнению с бизнес-типомданных. Более эффективно получить доступ к BFILE , если требуется получить только небольшой объем данных. Доступ к большим объектам, хранящимся в базе данных, эффективнее, если нужно получить весь объект целиком.

Каждый объект OracleBFile, отличный от NULL, связан с двумя сущностями, определяющими расположение базового физического файла:

  1. Объект Oracle DIRECTORY, который является псевдонимом базы данных для каталога в файловой системе.

  2. Имя файла базового физического файла, расположенного в каталоге, связанном с объектом DIRECTORY.

Пример

В следующем примере C# показано, как создать BFILE в таблице Oracle, а затем получить его в виде объекта OracleBFile . В примере демонстрируется использование OracleDataReader объекта и методов OracleBFileSeek и Read . Обратите внимание, что для использования этого примера необходимо сначала создать каталог с именем c:\\bfiles и файл с именем "MyFile.jpg" на сервере Oracle.

using System;  
using System.IO;  
using System.Data;  
using System.Data.OracleClient;  
  
public class Sample  
{  
   public static void Main(string[] args)  
   {  
      OracleConnection connection = new OracleConnection(  
        "Data Source=Oracle8i;Integrated Security=yes");  
      connection.Open();  
  
      OracleCommand command = connection.CreateCommand();  
      command.CommandText =
        "CREATE or REPLACE DIRECTORY MyDir as 'c:\\bfiles'";  
      command.ExecuteNonQuery();  
      command.CommandText =
        "DROP TABLE MyBFileTable";  
      try {  
        command.ExecuteNonQuery();  
      }  
      catch {  
      }  
      command.CommandText =
        "CREATE TABLE MyBFileTable(col1 number, col2 BFILE)";  
      command.ExecuteNonQuery();  
      command.CommandText =
        "INSERT INTO MyBFileTable values ('2', BFILENAME('MyDir', " +  
        "'MyFile.jpg'))";  
      command.ExecuteNonQuery();  
      command.CommandText = "SELECT * FROM MyBFileTable";  
  
        byte[] buffer = new byte[100];  
  
      OracleDataReader reader = command.ExecuteReader();  
      using (reader) {  
          if (reader.Read()) {  
                OracleBFile bFile = reader.GetOracleBFile(1);  
                using (bFile) {  
                  bFile.Seek(0, SeekOrigin.Begin);  
                  bFile.Read(buffer, 0, 100);  
              }  
          }  
      }  
  
      connection.Close();  
   }  
  
}  

См. также