IBM Buch

Verwaltung und Programmierung für OS/400

Überlegungen zu Datentypen

Die folgenden von der SQL-Sprachumgebung unterstützten Datentypen müssen gesondert betrachtet werden.

Verwenden großer Objekte

Sie können Dateien großer Objekte (LOBs) in DB2-Datenbanken speichern und mit der SQL-Sprachumgebung für Ihre Web-Anwendungen auf sie zugreifen.

Die SQL-Sprachumgebung speichert große Objekte weder in Net.Data-Variablen zur Tabellenverarbeitung (wie V1 oder V2) noch in Net.Data-Tabellenfeldern, wenn eine SQL-Abfrage LOBs in einer Ergebnismenge zurückgibt. Anstelle dessen wird das große Objekt nach seiner Feststellung durch Net.Data in einer von Net.Data erstellten Datei gespeichert. Diese Datei befindet sich in einem durch die Pfadkonfigurationsvariable HTML_PATH angegebenen Verzeichnis. Die Werte der Net.Data-Tabellenfelder und -Variablen zur Tabellenverarbeitung werden auf den Pfad zu dieser Datei gesetzt. Der Zugriff auf die Datei ist auf die Benutzer-ID beschränkt, unter der Net.Data ausgeführt wird.

Der Dateiname, unter dem das große Objekt gespeichert wird, wird dynamisch erstellt und weist folgendes Format auf:

name[.extension]

Dabei gilt folgendes:

name
Dies ist eine eindeutige Zeichenfolge, die das große Objekt angibt.

extension
Dies ist eine Zeichenfolge, die den Objekttyp angibt. Bei CLOBs und DBCLOBs ist die Erweiterung 'txt'. Bei BLOBs versucht die SQL-Sprachumgebung, die Erweiterung zu ermitteln, indem sie in den ersten Byte der LOB-Datei nach einer Kennung sucht, die angibt, was das große Objekt darstellt. Die SQL-Sprachumgebung erkennt die folgenden Datentypen (in den runden Klammern steht die verwendete Erweiterung):

Wird der Objekttyp des binären großen Objekts (BLOB) nicht erkannt, wird dem Dateinamen keine Erweiterung hinzugefügt.

Wenn in der Makrodatei auf das große Objekt verwiesen wird, gibt die SQL-Sprachumgebung den Dateinamen zurück und stellt ihm die Zeichenfolge /tmplobs/ vor. Dabei wird folgende Syntax verwendet:

/tmplobs/name.[extension]

Hinweis zur Planung: Jede Abfrage, die LOBs zurückgibt, erstellt im durch die Pfadkonfigurationsvariable HTML_PATH angegebenen Verzeichnis Dateien. Bei der Verwendung von LOBs ist die jeweilige Systemausstattung zu berücksichtigen, da diese Objekte die Systemressourcen schnell aufbrauchen können. Erwägen Sie das Erstellen eines Stapelverarbeitungsprogramms, das das Verzeichnis periodisch aufräumt. Es wird empfohlen, DataLinks zu verwenden. Dadurch braucht die SQL-Sprachumgebung Dateien nicht mehr in Verzeichnissen zu speichern, was zu einer Leistungsoptimierung und einer wesentlichen Reduzierung der belegten Systemressourcen führt.

Beispiel: Der Anwendungsbenutzer muß den Dateinamen anklicken, um die Anzeigefunktion aufzurufen, weil die Anwendung eine MPEG-Audiodatei (.MPA) verwendet. Die SQL-Sprachumgebung erkennt diesen Dateityp nicht. Daher wird die Erweiterung mit einer EXEC-Variablen an die Datei angehängt.

%DEFINE{
lobpath = "@DTW_RGETINIDATA("HTML_PATH")"
filename = "@DTW_RREPLACE($(V3), "/tmplobs/", "", "1", "F")"
myFile=%EXEC "REN '$(lobpath)/$(filename)'  '$(filename).mpa'"
%}
 
%{ where rename is the rename command on your operating system %} 
%FUNCTION(DTW_SQL) queryData() {
SELECT Name, IDPhoto, Voice FROM RepProfile
   %REPORT{
<P>Here is the information you selected:<P>
   %ROW{
$(myFile)
$(V1) Voice sample <IMG SRC="$(V2)">
<A HREF="$(V3).mpa")>Voice sample</A><P>
%}
%}
%}
 
%HTML(REPORT){
@queryData()
%}

Die Funktion queryData gibt folgende HTML-Ausgabe zurück:

<P>Here are the images you selected:<P>
Kinson Yamamoto
<IMG SRC="/tmplobs/p2345n1.gif">
<A HREF="/tmplobs/p2345n2.mpa">Voice sample</A><P>
Merilee Lau
<IMG SRC="/tmplobs/p2345n3.gif">
<A HREF="/tmplobs/p2345n4.mpa">Voice sample</A><P>

Der REPORT-Block im vorangegangenen Beispiel verwendet die impliziten Tabellenvariablen V1, V2 und V3.

Zugriffsrechte für LOBs: Stellen Sie sicher, daß die Benutzer-ID, unter der der Web-Server ausgeführt wird, Schreibzugriff auf das durch HTML_PATH angegebene Verzeichnis hat.

Codieren von DataLink-URL-Adressen in Ergebnismengen

Der Datentyp DATALINK ist einer der Grundbausteine für die Erweiterung der Datentypen, die in Datenbankdateien gespeichert werden können. Bei DATALINK sind die in der Spalte gespeicherten Daten lediglich ein Zeiger zur Datei. Diese Datei kann in einem beliebigen Dateityp vorliegen, z. B. eine Abbilddatei, eine Stimmaufzeichnung oder eine Textdatei. DataLink-Datentypen speichern eine URL-Adresse, um die Speicherposition der Datei aufzulösen.

Für den Datentyp DATALINK ist die Verwendung von DataLink File Manager erforderlich. Weitere Informationen zu DataLink File Manager finden Sie in der DataLinks-Dokumentation für Ihr Betriebssystem. Vor der Verwendung des Datentyps DATALINK müssen Sie sicherstellen, daß der Web-Server Zugriff auf das durch den Server mit DB2 File Manager verwaltete Dateisystem hat.

Wenn eine SQL-Abfrage eine Ergebnismenge mit DataLinks zurückgibt und die DataLink-Spalte mit den DataLink-Optionen FILE LINK CONTROL und READ PERMISSION DB erstellt wird, enthalten die Dateipfade in der DataLink-Spalte ein Zugriffs-Token. DB2 überprüft mit dem Zugriffs-Token den Zugriff auf die Datei. Ohne dieses Zugriffs-Token schlagen alle Zugriffsversuche auf die Datei mit einer Berechtigungsverletzung fehl. Das Zugriffs-Token enthält jedoch unter Umständen Zeichen, die in einer URL-Adresse (die an einen Browser zurückgegeben werden soll) nicht verwendet werden können, z. B. das Semikolon (;). Beispiel:

/datalink/pics/UN1B;0YPVKGG346KEBE;baibien.jpg
 

Die URL-Adresse ist ungültig, weil sie Semikolons (;) enthält. Die Semikolons müssen mit der integrierten Net.Data-Funktion DTW_URLESCSEQ codiert werden, um die Ungültigkeit der URL-Adresse aufzuheben. Vor der Anwendung dieser Funktion muß die Zeichenfolge allerdings noch bearbeitet werden, weil diese Funktion auch Schrägstriche (/) codiert.

Sie können eine Net.Data-Makrofunktion (MACRO_FUNCTION) schreiben, um die Bearbeitung der Zeichenfolge zu automatisieren und die Funktion DTW_URLESCSEQ zu verwenden. Verwenden Sie dieses Verfahren in jedem Makro, das Daten aus einer Spalte mit dem Datentyp DATALINK abruft.

Beispiel 1: MACRO_FUNCTION zur Automatisierung der Codierung von URL-Adressen, die von DB2 UDB zurückgegeben werden

%{ TO DO: Apply DTW_URLESCSEQ to a DATALINK URL to make it a valid URL.
    IN: DATALINK URL from DB2 File Manager column.                   
    RETURN: The URL with token portion is URL encoded               
%}
%MACRO_FUNCTION encodeDataLink(in DLURL) {                        
  @DTW_rCONCAT( @DTW_rDELSTR( DLURL, 
  @DTW_rADD(@DTW_rLASTPOS("/", DLURL), "1" ) ),
  @DTW_rURLESCSEQ( @DTW_rSUBSTR(DLURL,
  @DTW_rADD( @DTW_rLASTPOS("/", DLURL), "1" ) ) ) )
%}

Nach der Verwendung dieser Makrofunktion ist die URL-Adresse ordnungsgemäß codiert, und auf die in der Spalte DATALINK angegebene Datei kann in einem beliebigen Web-Browser verwiesen werden.

Beispiel 2: Ein Net.Data-Makro zur Angabe der SQL-Abfrage, die die DATALINK-URL-Adresse zurückgibt

    
 %FUNCTION(DTW_SQL) myQuery(){
  select name, DLURLCOMPLETE(picture) from myTable where name like '%river%'
   %REPORT{ 
   %ROW{ 
      <p> $(V1) <br> 
      Before Encoding: $(V2) <br> 
      After Encoding: @encodeDataLInk($(V2)) <br> 
      Make HREF: <a href="@encodeDataLink($(V2))"> click here </a> <br> <p> 
    %}
  %}
%}

Beachten Sie, daß eine Funktion von DataLink File Manager verwendet wird. Die Funktion dlurlcomplete gibt eine vollständige URL-Adresse zurück.


[ Seitenanfang | Vorherige Seite | Nächste Seite | Inhaltsverzeichnis | Index ]