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.