Verwenden Sie die benutzerdefinierte Funktion (UDF) "Content" in einer SQL-Anweisung SELECT, um ein Abbild-, Audio- oder Videoobjekt aus einer Datenbanktabelle abzurufen. Sie können das Objekt in einen Client-Puffer, eine Client-Datei oder eine Server-Datei abrufen.
Die benutzerdefinierte Funktion (UDF) "Content" ist mehrfach belegt. Dies bedeutet, daß sie abhängig von der Verwendung der UDF unterschiedliche Formate hat. Folgende Formate stehen zur Verfügung:
Format 1: Objekt ohne Formatumsetzung in einen Client-Puffer oder in einer Client-Datei abrufen:
Content( handle, /* object handle */ offset, /* offset where retrieval begins */ size /* number of bytes to retrieve */ );
Format 2: Objekt ohne Formatumsetzung in eine Server-Datei abrufen:
Content( handle, /* object handle */ target_file, /* server file name */ overwrite /* 0=Do not overwrite target file if it exists */ /* 1=Overwrite target file */ );
Darüber hinaus enthält die benutzerdefinierte Funktion "Content" die folgenden Formate für Abbildobjekte:
Format 3: Abbild mit Formatumsetzung in einen Client-Puffer oder eine Client-Datei abrufen:
Content( handle, /* object handle */ target format /* target format */ );
Format 4: Objekt mit Formatumsetzung in eine Server-Datei abrufen:
Content( handle, /* object handle */ target_file, /* server file name */ overwrite, /* 0=Do not overwrite target file if it exists */ /* 1=Overwrite target file */ target format /* target format */ );
Format 5: Objekt mit Formatumsetzung und zusätzlichen Änderungen in einen Client-Puffer oder in eine Client-Datei abrufen:
Content( handle, /* object handle */ target format, /* target format */ conversion_options /* conversion options */ );
Format 6: Objekt mit Formatumsetzung und zusätzlichen Änderungen in eine Server-Datei abrufen:
Content( handle, /* object handle */ target_file, /* server file name */ overwrite, /* 0=Do not overwrite target file if it exists */ /* 1=Overwrite target file */ target format, /* target format */ conversion_options /* conversion options */ );
Die folgende Anweisung ruft beispielsweise ein Abbild aus der Tabelle "employee" in eine Datei auf dem Server ab. Das Abbild wird ohne Formatumsetzung abgerufen. (Dies entspricht Format 2.)
EXEC SQL SELECT Content( /* retrieval UDF */ picture, /* image handle */ '/employee/images/ajones.bmp', /* target file */ 1) /* overwrite target file */ FROM employee WHERE name = 'Anita Jones';
Die folgenden Anweisungen in einem C-Anwendungsprogramm rufen ein Abbild aus der Tabelle "employee" in eine Datei auf dem Server ab. Das Format des Abbilds wird beim Abrufen umgesetzt. (Dies entspricht Format 4.)
EXEC SQL BEGIN DECLARE SECTION; struct { short len; char data [400]; }hvImg_fname; EXEC SQL END DECLARE SECTION; EXEC SQL SELECT Content( /* retrieval UDF */ picture, /* image handle */ '/employee/images/ajones.bmp', /* target file */ 1, /* overwrite target file */ 'GIF') /* target format */ INTO :hvImg_fname FROM employee WHERE name = 'Anita Jones';
Sie können die benutzerdefinierte Funktion "Content" verwenden, um ein Abbild-, Audio- oder Videoobjekt ohne Formatumsetzung in einen Client-Puffer oder eine Client-Datei abzurufen. Darüber hinaus haben Sie bei Abbildern die Möglichkeit anzugeben, daß der Image Extender beim Abrufen das Format des Abbilds umsetzen soll.
Verwenden Sie einen LOB-Zeiger, um ein Abbild-, Audio- oder Videoobjekt ohne Formatumsetzung in einen Client-Puffer abzurufen, oder rufen Sie das LOB ab. Verwenden Sie eine Dateireferenzvariable, um ein Abbild-, Audio- oder Videoobjekt in eine Client-Datei abzurufen.
Eine Dateireferenzvariable wird verwendet, um ein Abbild-, Audio- oder Videoobjekt in eine Client-Datei abzurufen, wenn der Inhalt des Objekts als BLOB (Binary Large Object) in einer Datenbanktabelle gespeichert ist. Befindet sich der Inhalt in einer Server-Datei, ist es möglicherweise günstiger, den Inhalt von der Server- in die Client-Datei zu kopieren.
Geben Sie die Kennung des Objekts an. Geben Sie außerdem die relative Adresse (beginnend mit Byte 1), an der die Abrufoperation beginnen soll, und die Anzahl der abzurufenden Byte an.
Die folgenden Anweisungen in einem C-Anwendungsprogramm verwenden einen LOB-Zeiger mit dem Namen audio_loc, um einen 1 MB großen Audioclip in einen Client-Puffer abzurufen.
EXEC SQL BEGIN DECLARE SECTION; SQL TYPE IS BLOB_LOCATOR audio_loc; EXEC SQL END DECLARE SECTION; EXEC SQL SELECT Content( sound, /* audio handle */ 1, /* audio offset */ 1000000) /* audio size */ INTO :audio_loc FROM employee WHERE name = 'Anita Jones';
Stellen Sie sicher, daß genügend UDF-Speicher zur Verfügung steht: Wenn Sie ein Objekt in einen Client-Puffer abrufen, müssen Sie sicherstellen, daß der Parameter UDF_MEM_SZ in der Datenbankmanagerkonfiguration auf einen Wert von mindestens 4 MB gesetzt ist. Sie können den Parameter UDF_MEM_SZ mit dem DB2-Befehl UPDATE DATABASE MANAGER CONFIGURATION aktualisieren. Informationen zum Befehl UPDATE DATABASE MANAGER befinden sich in der Veröffentlichung DB2 Command Reference.
Verwenden Sie einen LOB-Zeiger, um ein gespeichertes Abbild mit Formatumsetzung in einen Client-Puffer abzurufen, oder rufen Sie das LOB ab. Verwenden Sie eine Dateireferenzvariable, um ein gespeichertes Abbild mit Formatumsetzung in eine Client-Datei abzurufen.
Eine Dateireferenzvariable wird verwendet, um ein Abbild in eine Client-Datei abzurufen, wenn der Inhalt des Abbilds als BLOB (Binary Large Object) in einer Datenbanktabelle gespeichert ist. Befindet sich der Inhalt in einer Server-Datei, ist es möglicherweise günstiger, den Inhalt von der Server- in die Client-Datei zu kopieren.
Wenn Sie ein Abbild mit Formatumsetzung abrufen, müssen Sie sein Zielformat (d. h. das Format, in das umgesetzt wurde) angeben. In Tabelle 4 sind die gültigen Formatumsetzungen aufgelistet. Außerdem können Sie Umsetzungsoptionen für zusätzliche Änderungen angeben, z. B. Drehung oder Maßstabsänderung, die für das abgerufene Abbild angewendet werden sollen. In Tabelle 5 werden die Umsetzungsoptionen aufgelistet, die Sie angeben können.
Die folgenden Anweisungen in einem C-Anwendungsprogramm rufen beispielsweise ein Abbild in eine Client-Datei ab. Das Quellenabbild hat das Bitmap-Format und ist als BLOB in einer Datenbanktabelle gespeichert. Das abgerufene Abbild wird in das GIF-Format umgesetzt und auf die Dreifache der Originalgröße vergrößert.
EXEC SQL BEGIN DECLARE SECTION; SQL TYPE IS BLOB_FILE Img_file; EXEC SQL END DECLARE SECTION; strcpy (Img_file.name, "/employee/images/ajones.gif"); Img_file.name_length= strlen(Img_file.name); Img_file.file_options= SQL_FILE_CREATE; EXEC SQL SELECT Content( picture, /* image handle */ 'GIF', /* target format */ '-s 3.0') /* conversion options */ INTO :Img_file, FROM employee WHERE name = 'Anita Jones';
Sie können die benutzerdefinierte Funktion "Content" verwenden, um ein Abbild-, Audio- oder Videoobjekt ohne Formatumsetzung in ein Server-Datei abzurufen. Darüber hinaus können Sie die benutzerdefinierte Funktion "Content" verwenden, um ein Abbild mit Formatumsetzung in eine Server-Datei abzurufen.
Geben Sie die Kennung des Objekts, den Zieldateinamen und einen Überschreibungsanzeiger an, wenn Sie ein Abbild-, Audio- oder Videoobjekt ohne Formatumsetzung in eine Datei auf dem Server abrufen. Der Überschreibungsanzeiger teilt dem Extender mit, ob die Zieldatei mit den abgerufenen Daten überschrieben werden soll, falls sie bereits auf dem Server existiert. Existiert die Zieldatei nicht, erstellt sie der Extender auf dem Server.
Bei Angabe eines Überschreibungsanzeigers mit dem Wert 1 überschreibt der Extender die Zieldatei mit den abgerufenen Daten. Bei Angabe eines Überschreibungsanzeigers mit dem Wert 0 überschreibt der Extender die Zieldatei nicht. Daher werden die Daten nicht abgerufen.
Der Überschreibungsanzeiger wird ignoriert, wenn das abzurufende Objekt als BLOB in einer Datenbanktabelle gespeichert ist. In diesem Fall wird die Zieldatei unabhängig von der Angabe im Überschreibungsanzeiger erstellt oder überschrieben.
Wenn Sie ein Objekt in eine Server-Datei abrufen, gibt es den Namen der Server-Datei zurück. Die folgende Anweisung in einem C-Anwendungsprogramm ruft beispielsweise ein Video in eine Datei auf dem Server ab. Der Dateiname der Server-Datei wird in der Host-Variablen hvVid_fname gespeichert.
EXEC SQL BEGIN DECLARE SECTION; struct{ short len; char data[250]; }hvVid_fname; EXEC SQL END DECLARE SECTION; EXEC SQL SELECT Content( video, /* video handle */ '/employee/videos/ajones.mpg', /* server file */ 1) /* overwrite target file */ INTO :hvVid_fname; FROM employee WHERE name = 'Anita Jones';
Die benutzerdefinierte Funktion "Content" kann verwendet werden, um ein Objekt ohne Formatumsetzung in eine Server-Datei abzurufen, wenn der Inhalt des Abbilds als BLOB (Binary Large Object) in einer Datenbanktabelle gespeichert ist. Ist das Objekt in einer Server-Datei gespeichert, ist es möglicherweise günstiger, den Inhalt der Quellendatei in die Zieldatei zu kopieren.
Geben Sie die Kennung des Abbilds, den Zieldateinamen, einen Überschreibungsanzeiger für das Ziel und das Zielformat an, wenn Sie ein Abbild mit Formatumsetzung in eine Server-Datei abrufen. In Tabelle 4 ist aufgelistet, welche Formatumsetzungen zulässig sind. Sie können als Zielformat auch einen Nullwert, eine leere Zeichenfolge oder die Zeichenfolge ASIS angeben. In diesem Fall hat das abgerufene Abbild das gleiche Format wie die Quelle.
Die folgenden Anweisungen in einem C-Anwendungsprogramm rufen beispielsweise ein Abbild in eine Datei auf dem Server ab. Das Quellenabbild hat das Bitmap-Format und ist als BLOB in einer Datenbanktabelle gespeichert. Das abgerufene Abbild wird in das GIF-Format umgesetzt. Der Dateiname der Server-Datei wird in der Host-Variablen hvImg_fname gespeichert.
EXEC SQL BEGIN DECLARE SECTION; struct { short len; char [400]; }hvImg_fname; EXEC SQL END DECLARE SECTION; EXEC SQL SELECT Content( picture, /* image handle */ '/employee/images/ajones.gif', /* target file */ 1, /* overwrie target file */ 'GIF') /* target format */ INTO :hvImg_fname FROM employee WHERE name = 'Anita Jones';
Die Server-Datei muß im Zugriff befindlich sein: Wenn Sie ein Objekt in eine Server-Datei abrufen, müssen Sie den vollständig qualifizierten Namen der Datei angeben oder sicherstellen, daß die Umgebungsvariablen DB2IMAGEEXPORT, DB2AUDIOEXPORT und DB2VIDEOEXPORT so gesetzt sind, daß eine unvollständige Angabe des Dateinamens korrekt aufgelöst werden kann.
Wenn Sie ein Abbild-, Audio- oder Videoobjekt in einer Datenbank speichern, speichert der Extender auch die Attribute des Objekts in der Datenbank. Wenn Sie ein Objekt aktualisieren, aktualisiert der Extender auch die in der Datenbank gespeicherten Attribute. Diese Attribute können in Abfragen verwendet werden.
Für jedes von den Extendern verwaltete Attribut werden benutzerdefinierte
Funktionen erstellt. Daher können Sie benutzerdefinierte Funktionen
(UDFs) in SQL-Anweisungen angeben, um auf Objektattribute zuzugreifen und sie
zu verwenden. In In der folgenden Tabelle werden die Attribute, die die
Extender verwenden, und ihre benutzerdefinierten Funktionen
aufgelistet. Außerdem gibt die Tabelle die Objekttypen für jedes
Attribut an. Manche dieser Attribute, wie beispielsweise das Format
oder der Dateiname eines Objekts, werden für alle Objekttypen verwendet,
d. h., sie sind Abbild-, Audio- und Videoobjekten
zugeordnet. Andere Attribute, wie beispielsweise die Abtastrate oder
die Komprimierungsart, sind bestimmten Objekttypen (z. B. Audio-
oder Videoobjekt) zugeordnet.
Tabelle 6. Von den DB2 Extendern verwaltete Attribute
Attribut | UDF | Image | Audio | Video |
---|---|---|---|---|
Name der Server-Datei, in der das Objekt gespeichert ist | Filename | x | x | x |
Benutzer-ID des Benutzers, der das Objekt gespeichert hat | Importer | x | x | x |
Datum und Uhrzeit, zu dem bzw. der das Objekt gespeichert wurde | ImportTime | x | x | x |
Größe des Objekts in Byte | Size | x | x | x |
Benutzer-ID des Benutzers, der das Objekt zuletzt aktualisiert hat | Updater | x | x | x |
Datum und Uhrzeit, zu dem bzw. der das Objekt zuletzt aktualisiert wurde | UpdateTime | x | x | x |
Format des Objekts (z. B. GIF oder MPEG1) | Format | x | x | x |
Kommentare zum Objekt | Comment | x | x | x |
Höhe des Objekts in Pixel | Height | x | x | |
Breite des Objekts in Pixel | Width | x | x | |
Anzahl der Farben im Objekt | NumColors | x | ||
Piktogrammgroßes Abbild des Objekts | Thumbnail | x | x | |
Anzahl der Byte, die pro Sample in einem Ton oder einer Tonspur eines Videos zurückgegeben werden | AlignValue | x | x | |
Anzahl der für jedes Sample verwendeten Bit | BitsPerSample | x | x | |
Anzahl der aufgezeichneten Kanäle | NumChannels | x | x | |
Dauer in Sekunden | Duration | x | x | |
Abtastrate (in Samples pro Sekunde) | SamplingRate | x | x | |
Durchschnittlicher Übertragungswert in Byte pro Sekunde | BytesPerSec | x | ||
Nummer der Tonspur für das Instrument | FindInstrument | x | ||
Spurnummer der angegebenen Spur | FindTrackName | x | ||
Name der aufgezeichneten Instrumente | GetInstruments | x | ||
Spurnummern und Namen der aufgezeichneten Instrumente | GetTrackNames | x | ||
Taktimpulse pro Sekunde des Audioclips | TicksPerSec | x | ||
Taktimpulse pro Viertelnote des Audioclips | TicksPerQNote | x | ||
Streckungsverhältnis | AspectRatio | x | ||
Videokomprimierungsformat (z. B. MPEG1) | CompressType | x | ||
Vollbilder pro Sekunde Durchsatz | FrameRate | x | ||
Maximaler Durchsatz in Byte pro Sekunde | MaxBytesPerSec | x | ||
Anzahl der Tonspuren | NumAudioTracks | x | x | |
Anzahl der Vollbilder | NumFrames | x | ||
Anzahl der Videospuren | NumVideoTracks | x |
Sie können eine Attribut-UDF im Ausdruck einer SELECT-Klausel oder in der Suchbedingung einer WHERE-Klausel in einer SQL-Anweisung verwenden. Geben Sie bei der Anforderung der UDF den Namen der Spalte in der Datenbanktabelle an, die die Kennung des Objekts enthält.
Die folgende Anweisung verwendet beispielsweise die UDF "Updater" in der SELECT-Klausel einer SQL-Anweisung SELECT, um die Benutzer-ID des Benutzers abzurufen, der ein Abbild in der Tabelle "employee" zuletzt aktualisiert hat:
EXEC SQL BEGIN DECLARE SECTION; char hvUpdatr[30]; EXEC SQL END DECLARE SECTION; EXEC SQL SELECT Updater(picture) INTO :hvUpdatr FROM employee WHERE name = 'Anita Jones';
Die folgende Anweisung verwendet die UDF "Filename" in der SELECT-Klausel einer SQL-Anweisung SELECT und die UDF "NumAudioTracks" in der WHERE-Klausel, um in der Tabelle "employee" gespeicherte Videos zu suchen, die über Tonspuren verfügen.
EXEC SQL BEGIN DECLARE SECTION; char hvVid_fname[251]; EXEC SQL END DECLARE SECTION; EXEC SQL SELECT Filename(video) INTO :hvVid_fname FROM employee WHERE NumAudioTracks(video)>0;
Verwenden Sie die UDF "Comment", um mit einem Abbild-, Audio- oder Videoobjekt gespeicherte Kommentare abzurufen. Geben Sie beim Abrufen eines Kommentars für ein Objekt die Spalte in der Datenbanktabelle an, die die Kennung des Objekts enthält. Die folgende Anweisung ruft beispielsweise einen mit einem Audioclip gespeicherten Kommentar in der Tabelle "employee" ab.
EXEC SQL BEGIN DECLARE SECTION; struct { short len; char data[32700]; }hvComment EXEC SQL END DECLARE SECTION; EXEC SQL SELECT Comment(sound) INTO :hvComment FROM employee WHERE name = 'Anita Jones';
Darüber hinaus können Sie die UDF "Comment" als Vergleichselement in der Klausel WHERE einer SQL-Abfrage verwenden. Die folgende Anweisung ruft beispielsweise die Dateinamen aller Abbilder, die mit dem Kommentar "touched up" (retuschiert) versehen wurden, in der Tabelle "employee" ab.
EXEC SQL BEGIN DECLARE SECTION; struct { short len; char data[250]; }hvImg_fname EXEC SQL END DECLARE SECTION; EXEC SQL SELECT Filename(picture) INTO :hvImg_fname FROM employee WHERE Comment(picture) LIKE '%touch%up';