LOB

Unter dem Oberbegriff LOB sind in SQL und bei Oracle PL/SQL folgende Datentypen für die Speicherung großer unstrukturierter Objekte zusammengefasst:

Large Objects

  • BLOB (Binary Large Object) für Bilder, Ton, Video, speichert Binärdaten in der Datenbank
  • CLOB (Character Large Object) für Texte, speichert alphanumerische Daten in der Datenbank im Datenbankzeichensatz
  • NCLOB (Character Large Object) für Texte, speichert alphanumerische Daten in der Datenbank im nationalen Zeichensatz
  • BFILE (Large Object): Enthält einen Verweis auf einen externe Datei, die außerhalb der Datenbank gespeichert ist. (Oracle_Spezifisch)

LOB-Attribut sind nicht erlaubt

LOB-Datentypen haben immer zwei Komponenten

  • LOB Value:
    • Aktuelle Daten des LOB‘s
    • solange diese kleiner als 4K sind, werden sie in der Tabelle selber gespeichert
    • LOB Daten größer als 4 k werden in einem eigenen Segment gespeichert.
    • BFILEs sind immer extern und unterliegen nicht dieser Regel.
  • LOB Locator:
    • Zeiger auf die LOB-Daten

ORACLE kennt schon seit längerer Zeit die Datentypen LONG und LONGRAW, die das Speichern von großen, binären Daten (bis 2 GB) erlauben. Mit SQL 1999 und ORACLE ab Version 8 wurden diese Multimediadatentypen standardisiert und durch BLOB, CLOB , NCLOB und BFILE ergänzt. Die Gründe hierfür waren vielfältig.

  • Diese neuen Datentypen entsprechen dem SQL 1999 Standard
  • Auf LONG-Datentypen sind keine SQL-Funktionen zulässig
  • Es ist nur ein LONG oder LONG-RAW-Datentyp je Tabelle zugelassen.

Unter Oracle sind in einer CREATE Table-Anweisung im Gegensatz zu LONG und LONGRAW mehrere BLOB-Attribute zulässig. Interne LOB-Attribute erlauben eine maximale Größe von 4 GB je Attributwert. Vorteile von internen LOBS gegenüber externen LOBS (BFILE) sind, dass internen LOBS unter das Transaktionskonzept fallen. Sie können mit der Datenbank gesichert werden und stehen für Fehlererholungsmaßnahmen zu Verfügung. Änderungen an BLOB- und CLOB- Daten können mit COMMIT bestätigt und mit ROLLBACK zurückgerollt werden. Das ist bei BFILE-Daten nicht der Fall.

Operationen für LOB-Datentypen unter Oracle-SQL

  1. EMPTY_BLOB() ist ein parameterloser Konstruktor, der eine BLOB-Datentyp initialisiert
  2. EMPTY_CLOB() ist ein parameterloser Konstruktor, der eine CLOB-Datentyp initialisiert
  3. BFILENAME erwartet zwei Parameter: Das Verzeichnis, indem die externen Daten verwaltet werden und den Namen der externen Datei.
  4. IS NULL ermöglicht das Testen auf NULL.

Beispiel

  CREATE TABLE Personen (
   Name VARCHAR (30),
   Bild BLOB,
   BildDatei BFILE,
   Bewerbung CLOB,
   BewerbungDatei BFILE ) ;

Für BFILES muss mit dem CREATE DIRECTORY-Kommando ein Verzeichnis angelegt werden, das auf dem Datenbankserver liegt.

Beispiel

 CREATE DIRECTORY MIT_BILDER AS  'A:\TEMP\';

LOB-Werte werden mit den LOB-Operatoren EMPTY_BLOB() bzw. BFILENAME initialisiert:

 INSERT INTO Personen
           VALUES ('Karl', 
           EMPTY_BLOB (),
           BFILENAME ('Mit_BILDER', 'karl.gif'),
           EMPTY_CLOB ();
           BFILENAME ('A:\TEMP\', 'karl.txt');

LOB-Werte können nicht direkt in SQL bearbeitet werden. Es ist jedoch möglich, dieses mit PL/SQL-Prozeduren zu tun. Dazu ist das Paket DBMS-LOB vorgesehen.

siehe auch: Multi-Media-Datentyp

Quellen:

  • Faeskorn-Woyke, Heide; Bertelsmeier, Birgit; Riemer, Petra; Bauer, Elena: "Datenbanksysteme - Theorie und Praxis mit SQL2003, Oracle und MySQL", Pearson Education, München, 2007, ISBN 978-3-8273-7266-6
  • Feuerstein, Steven, Pribyl. Bill: "Oracle PL/SQL Programming", O'Reilly, 2009, ISBN-13: 978-0596514464
  • Oracle® Database SQL Language Reference 11g Release 1 (11.1) in http://docs.oracle.com/cd/B28359_01/server.111/b28286/toc.htm
  • Oracle® Database PL/SQL Language Reference 11g Release 2 (11.2) in http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/toc.htm
  • Saurabh, Gupta: "Oracle Advanced PL/SQL Developer Professional Guide", Packt Publishing Limited, 2012, ISBN 978-1-84968-722-5

Kategorie: SQL, Oracle-PL-SQL, Objektrelationales SQL, L