Bilder mit relationalen Tabellendaten kombinieren

In den letzten Ausgaben wurde beschrieben, wie Sie Anwendungen zum Hoch- und Herunterladen von Dateien mit der HTML DB erstellen können. Lesen Sie in dieser Ausgabe nochmals eine Zusammenfassung und darüber hinaus, wie Sie diese Technologie zur Integration von Bildern in ihre Anwendung nutzen können.


Ausgangsbasis ist eine Anwendung basierend auf den bekannten Tabellen EMP und DEPT. Diese Datensätze werden mit einem Formular bearbeitet. Ziel ist es, zu jedem Mitarbeiter ein Bild hochladen und in dieser Übersicht anzeigen zu können.

Zunächst benötigen wir in der Tabelle EMP zusätzliche Spalten - sie sollen das hochgeladene Bild aufnehmen. Da es verschiedenste Arten von Bildern gibt, werden zwei Spalten benötigt: Eine enthält das Bild selbst, die andere nimmt den Mime-Type auf und gibt damit an, ob es sich um ein GIF, JPEG, PNG oder ein anderes Bild handelt. Nennen Sie die Spalte für das Bild PICTURE und die für den Mime-Type MIMETYPE.

Das Formular zum Bearbeiten der Datensätze erstellen Sie am besten mit den bekannten HTML DB Assistenten (Form auf Tabelle). Fügen Sie dem Formular nach Erstellung ein neues Element zum Hochladen einer Datei hinzu.

Anschließend sollte das Formular in etwa wie folgt aussehen:

Wie in den Tipps der letzten Wochen beschrieben, wird auch hier wiederum ein PL/SQL-Prozeß benötigt, der das Bild aus der HTMLDB-Systemtabelle WWV_FLOW_FILES herausnimmt und in die Tabelle EMP speichert. Dies soll jedoch nur geschehen, wenn tatsächlich ein Bild hochgeladen wurde. Dies lässt sich am einfachsten anhand des Mime-Type feststellen. Mime-Types für Bilder fangen mit "image/" an. Legen Sie also nun einen PL/SQL-Prozeß an und hinterlegen Sie folgenden PL/SQL-Code:

declare
  v_mimetype varchar2(100);
  v_bild blob;
begin
  select blob_content, mime_type into v_bild, v_mimetype 
  from wwv_flow_files where name=:P2_BILD;

  if lower(substr(v_mimetype,1,5)) = 'image' then 
    update EMP set  
      PICTURE = v_bild, 
      MIMETYPE = v_mimetype
    where EMPNO = :P2_EMPNO;
  end if;

  delete from wwv_flow_files where name=:P2_BILD;
end;

In diesem Beispiel sorgt der vom HTML DB Assistenten erzeugte Prozeß Process Row of EMP dafür, dass die relationalen Tabellenattribute eingefügt bzw. geändert werden. Der soeben angelegte PL/SQL-Prozeß UPDATE_IMAGE sorgt dafür, dass das hochgeladene Bild entsprechend in die Tabelle eingetragen wird. Legen Sie fest, dass Ihr PL/SQL-Prozeß nur beim Klick auf die Schaltflächen CREATE pder SAVE aktiv wird.



Damit sind die Arbeiten am Formular getan. Damit das Bild angezeigt werden kann wird zunächst - wie im letzten "Tipp der Woche" - eine PL/SQL-Prozedur benötigt, die zum Herunterladen des Bildes dient. Legen Sie also im SQL Workshop eine neue Prozedur an. Sie nimmt als Parameter die EMPNO entgegen und gibt daraufhin das in der Tabelle EMP gespeicherte Bild aus. Vergessen Sie nicht, das GRANT EXECUTE -Kommando abzusetzen.

CREATE OR REPLACE PROCEDURE emp_bild_zeigen (p_empno IN NUMBER)
IS
  v_laenge   NUMBER := 0;
  v_bild     emp.picture%TYPE;
  v_mimetype emp.mimetype%TYPE;
BEGIN
  BEGIN
    SELECT picture, mimetype, DBMS_LOB.GETLENGTH(picture)
    INTO v_bild, v_mimetype, v_laenge
    FROM emp where empno=p_empno;

    OWA_UTIL.MIME_HEADER(v_mimetype,false);
    HTP.P('Content-length:'|| v_laenge);
    OWA_UTIL.HTTP_HEADER_CLOSE;
 
    WPG_DOCLOAD.DOWNLOAD_FILE(v_bild);
  EXCEPTION
    WHEN OTHERS THEN NULL;
  END;
END;
GRANT EXECUTE ON emp_bild_zeigen TO PUBLIC

Nun erfolgen die Arbeiten am Bericht auf der Übersichtsseite. Es ist gleich, ob er als Einfacher Bericht oder als SQL Bericht erstellt wurde. Fügen Sie ihm eine "Pseudospalte" (der Inhalt ist ohne Bedeutung; wir brauchen lediglich eine weitere Spalte) hinzu - im SQL Bericht sieht das wie folgt aus.

Im Beispiel zeigt die neue Spalte PICTURE lediglich die EMPNO an. Dort soll jedoch das hochgeladene Bild erscheinen. Um dies zu erreichen, navigieren Sie zu den Attributen der neuen Spalte.

Im Bereich Spaltenformatierung verwenden Sie nun das HTML-Tag zum Einbinden von Bildern (IMG). Die Quelle (src) ist nun jedoch die soeben erstellte PL/SQL-Prozedur, die als Parameter die EMPNO übergeben bekommt. Laden Sie nun zu einem der Einträge ein Bild hoch und schauen Sie sich das Ergebnis an.

Natürlich sind auch hier noch Erweiterungen denkbar. So könnte man ein "Standardbild" definieren, welches automatisch gespeichert wird, wenn der Benutzer keins angibt. Außerdem wird die Datei, wenn sie kein Bild ist, in diesem Beispiel ignoriert. Eine Fehlermeldung wäre im "realen Leben" natürlich wünschenswert.

Zurück zur Community-Seite