Oracle BFILE

Program .NET Framework Dostawca danych for Oracle zawiera klasę OracleBFile używaną do pracy z typem danych OracleBFile.

Typ danych Oracle BFILE jest typem danych Oracle LOB zawierającym odwołanie do danych binarnych o maksymalnym rozmiarze 4 gigabajtów. Plik BFILE oracle różni się od innych typów danych LoB oracle, w których jego dane są przechowywane w pliku fizycznym w systemie operacyjnym zamiast na serwerze. Należy pamiętać, że typ danych BFILE zapewnia dostęp tylko do odczytu do danych.

Inne cechy typu danych BFILE , które odróżniają go od typu danych BIZNESOWYCH , są następujące:

  • Zawiera dane bez struktury.

  • Obsługuje fragmentowanie po stronie serwera.

  • Używa semantyki kopiowania odwołań. Jeśli na przykład wykonasz operację kopiowania w pliku BFILE, kopiowany jest tylko lokalizator BFILE (który jest odwołaniem do pliku). Dane w pliku nie są kopiowane.

Typ danych BFILE powinien być używany do odwoływania się do baz danych o dużym rozmiarze i dlatego nie jest praktyczny do przechowywania w bazie danych. W przypadku korzystania z typu danych BFILE w porównaniu z typem danych BIZNESOWYCH jest zaangażowanych więcej klientów, serwerów i komunikacji. Dostęp do pliku BFILE jest bardziej wydajny, jeśli potrzebujesz tylko niewielkiej ilości danych. Wydajniejsze jest uzyskiwanie dostępu do obiektów LOB będących rezydentami bazy danych, jeśli chcesz uzyskać cały obiekt.

Każdy obiekt OracleBFile o wartości innej niż NULL jest skojarzony z dwiema jednostkami, które definiują lokalizację bazowego pliku fizycznego:

  1. Obiekt Oracle DIRECTORY, który jest aliasem bazy danych dla katalogu w systemie plików i

  2. Nazwa pliku bazowego pliku fizycznego, który znajduje się w katalogu skojarzonym z obiektem DIRECTORY.

Przykład

W poniższym przykładzie w języku C# pokazano, jak utworzyć plik BFILE w tabeli Oracle, a następnie pobrać go w postaci obiektu OracleBFile . W przykładzie OracleDataReader pokazano użycie obiektu i metod OracleBFileSeek i Read . Należy pamiętać, że aby użyć tego przykładu, należy najpierw utworzyć katalog o nazwie "c:\\bfiles" i plik o nazwie "MyFile.jpg" na serwerze 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();  
   }  
  
}  

Zobacz też