LOB: Long Objects / Large Objects

Werbung
LOB:
Text
Bild
Röntgenbild
Video
Long Objects / Large Objects
ca. 30 – 40 KB / Seite
ca. 30 – 3000 KB
ca. 40 – 60 MB
ca. 1 – 3 GB / h
BLOB = binary long object
CLOB = character long object
NCLOB = national character long object
(z.B. deutsche Texte mit Umlauten)
DBMS
Informix
MS SQL Server
Oracle
SQL Anywhere
Sybase Adaptive Server
BLOB
CLOB
BYTE
TEXT
IMAGE
TEXT
LONG RAW
LONG
IMAGE
TEXT
IMAGE
TEXT
(max. Datenlänge stets 2 GB)
ƒ direkt von der DB verwaltet
ƒ max. Größe kann bei Spaltendefinition explizit angegeben
werden: K, M oder G
Speicherung:
− entweder innerhalb der DB in speziellen Speicherbereichen
Nachteil: leistungsmindernd, da derart große Objekte bei
der Bearbeitung anderer Objekte stören können: belegen
viele Speicherseiten
− oder in zusätzlichen (DB-)Dateien
Nachteil: Lesen und Schreiben über zusätzliche
Funktionen mit engen Beschränkungen
CREATE TABLE buecher
(isbn
CHAR(13),
titel CHAR(100),
inhaltsverzeichnis CLOB(20K),
buch_datei NCLOB(20M) COLLATE mein_satz,
begleit_film BLOB(2G));
Sortierfolgetabelle
nicht erlaubt sind:
− Vergleiche mit < oder >
− DISTINCT
− UNIQUE-Integritätsregeln
− GROUP BY und ORDER BY
− UNION, EXCEPT und INTERSECT
− Verwendung als Join-Spalte
LOB-Funktionen:
− CAST-Operator
− Zuweisung
− Vergleich
− Verkettung
− skalare Funktionen
(nachfolgend nur BLOB erwähnt, aber
gültig für alle LOB-Typen)
CAST-Operator:
Æ
integer
skalarer Wert Æ
Æ
BLOB
BLOB
explizite Datentypänderung, z.B:
skalarer Wert
BLOB
CLOB
falls Ziellänge >= Quelllänge: identisch,
sonst abgeschnitten und Warnung (01004
in SQLSTATE)
Æ benutzerdefinierter Datentyp
dazu muss eine benutzerdefinierte
Umwandlungsfunktion existieren, deren
Parameter dem Quelltyp entspricht
CAST (12345 as BLOB)
Zuweisung: zwischen BLOB und binärer Zeichenkette
− Zuweisung stets byteweise v.l.n.r.
− Ziellänge wird angepasst an Länge der Quelle bis zur max.
zulässigen Länge; ggf. verkürzte Übertragung und Warnung
− falls Quelle NULL ist, bleibt Ziel unverändert
Vergleich:
− byteweise v.l.n.r.
− nur = und <>
Verkettung:
− wie bei Zeichenketten
− mit | |
skalare Funktionen:
SUBSTRING
OVERLAY
TRIM
POSITION
LENGTH
NULLIF
liefern BLOB-Objekt
liefern integer-Wert
liefert BLOB-Objekt oder NULL
SUBSTR(begleit_film, 1, 1000)
− liefert die ersten 1000 Oktets
OVERLAY(begleit_film, zusatz, 1, 800)
− überschreibt die ersten 800 Oktets
− wenn Länge nicht angegeben: Länge des 2. Operanden
POSITION(begleit_film, zusatz)
− liefert Position, wo zusatz in begleit_film auftritt
− liefert 0, wenn nicht enthalten
LENGTH(begleit_film)
− wird als generische Funktion verwendet:
BIT_LENGTH
Anzahl der Bits
CHAR_LENGTH
Anzahl der Oktets
OKTET_LENGTH
NULLIF(begleit_film, zusatz)
− Operanden sind identisch:
NULL
− Operanden sind nicht identisch: 1. Operand
LOBs und Anwendungsprogramme:
mögliche Probleme mit Host-Variablen:
− enormer Platzbedarf
− der vorhandene zusammenhängende Speicher ist zu klein als
Puffer
− ein LOB muss ggf. mehrmals (nacheinander) bereitgestellt
werden, da immer wieder verschiedene Teile daraus benötigt
werden
ESQL/C und SQLJ benutzen deshalb sog. Lokator anstelle
einer Host-Variablen
4-Byte-Wert in einer Host-Variablen
EXEC SQL BEGIN DECLARE SECTION;
SQL TYPE IS CLOB AS LOCATOR inhalts_locator
SQL TYPE IS BLOB AS LOCATOR film_locator;
EXEC SQL END DECLARE SECTION;
EXEC SQL SELECT inhaltsverzeichnis, begleit_film
INTO :inhalts_locator, :film_locator
FROM buecher
WHERE isbn = '3-8273-1889-0'
3 Lokator-Arten:
BLOB-, CLOB- und NCLOB-Lokatoren
explizite Verbindungsauflösung: FREE LOCATOR :name
implizite Verbindungsauflösung: bei Transaktionsende
d.h. Gültigkeitsbereich eines Lokators ist auf eine TA begrenzt
HOLD LOCATOR :name
hält den Wert des Lokators über die TA-Grenze hinweg
(falls TA erfolgreich beendet wurde)
.
.
.
EXEC SQL SELECT inhaltsverzeichnis, begleit_film
INTO :inhalts_locator, :film_locator
FROM buecher
WHERE isbn = '3-8273-1889-0'
HOLD LOCATOR :film_locator;
.
.
.
EXEC SQL COMMIT;
.
.
.
EXEC SQL INSERT INTO buecher
VALUES( ..., :film_locator);
Herunterladen