Sie können nicht auf ein lokales Verzeichnis von pl/sql aus zugreifen. Wenn Sie bfile verwenden, müssen Sie ein Verzeichnis (Verzeichnis erstellen) auf dem Server einrichten, auf dem Oracle läuft, und dort müssen Sie Ihre Bilder ablegen.
Wenn Sie eine Handvoll Bilder von Ihrem lokalen Rechner einfügen möchten, benötigen Sie eine Client-App, um dies zu tun. Sie können Ihre eigene schreiben, aber ich verwende normalerweise Toad dafür. Im Schema-Browser auf die Tabelle klicken. Klicken Sie auf den Daten-Tab und dann auf das +-Zeichen, um eine Zeile hinzuzufügen. Doppelklicken Sie auf die BLOB-Spalte, und ein Assistent wird geöffnet. Das Symbol weit links lädt ein Bild in den Blob:
SQL Developer hat eine ähnliche Funktion. Sehen Sie den "Laden" Link unten:
Wenn Sie Bilder über das Netzwerk übertragen müssen, können Sie dies mit pl/sql tun, aber es ist nicht direkt. Zunächst müssen Sie den Zugriff auf die ACL-Liste einrichten (aus Sicherheitsgründen), um einem Benutzer das Übertragen über das Netzwerk zu ermöglichen. Sehen Sie sich den Artikel für weitere Informationen zur ACL-Einrichtung an.
Angenommen, die ACL ist komplett, würden Sie das Bild wie folgt übertragen:
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
-- Wichtig: ACL-Zugriffsliste zuerst einrichten!
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);
-- Die Antwort in den BLOB kopieren.
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;
Ich hoffe, das hilft.