Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Bild in BLOB einfügen Oracle 10g

Sie können von pl/sql aus nicht auf ein lokales Verzeichnis zugreifen. Wenn Sie bfile verwenden, richten Sie auf dem Server, auf dem Oracle ausgeführt wird, ein Verzeichnis (Verzeichnis erstellen) ein, in dem Sie Ihre Bilder ablegen müssen.

Wenn Sie eine Handvoll Bilder von Ihrem lokalen Computer einfügen möchten, benötigen Sie dazu eine clientseitige App. Sie können Ihre eigenen schreiben, aber ich verwende normalerweise Toad dafür. Klicken Sie im Schemabrowser auf die Tabelle. Klicken Sie auf die Registerkarte Daten und drücken Sie das + Zeichen, um eine Zeile hinzuzufügen. Doppelklicken Sie auf die Spalte BLOB, und ein Assistent wird geöffnet. Das Symbol ganz links lädt ein Bild in den Blob:

SQL Developer hat eine ähnliche Funktion. Siehe den "Laden"-Link unten:

Wenn Sie Bilder über die Leitung ziehen müssen, können Sie dies mit pl/sql tun, aber es ist nicht einfach. Zuerst müssen Sie (aus Sicherheitsgründen) den Zugriff auf die ACL-Liste einrichten, damit ein Benutzer die Leitung überbrücken kann. Weitere Informationen zum ACL-Setup finden Sie in diesem Artikel.

Unter der Annahme, dass ACL vollständig ist, würden Sie das Bild wie folgt abrufen:

declare
    l_url varchar2(4000) := 'http://www.oracleimg.com/us/assets/12_c_navbnr.jpg';
    l_http_request   UTL_HTTP.req;
    l_http_response  UTL_HTTP.resp;
    l_raw RAW(2000);
    l_blob BLOB;
begin
   -- Important: setup ACL access list first!

    DBMS_LOB.createtemporary(l_blob, FALSE);

    l_http_request  := UTL_HTTP.begin_request(l_url);
    l_http_response := UTL_HTTP.get_response(l_http_request);

  -- Copy the response into the BLOB.
  BEGIN
    LOOP
      UTL_HTTP.read_raw(l_http_response, l_raw, 2000);
      DBMS_LOB.writeappend (l_blob, UTL_RAW.length(l_raw), l_raw);
    END LOOP;
  EXCEPTION
    WHEN UTL_HTTP.end_of_body THEN
      UTL_HTTP.end_response(l_http_response);
  END;

  insert into my_pics (pic_id, pic) values (102, l_blob);
  commit;

  DBMS_LOB.freetemporary(l_blob); 
end;

Hoffe das hilft.