U heeft geen toegang tot een lokale map vanuit pl/sql. Als u bfile gebruikt, stelt u een map in (directory maken) op de server waarop Oracle draait waar u uw afbeeldingen moet plaatsen.
Als u een handvol afbeeldingen van uw lokale computer wilt invoegen, heeft u hiervoor een app aan de clientzijde nodig. Je kunt je eigen schrijven, maar ik gebruik hiervoor meestal Toad. Klik in de schemabrowser op de tabel. Klik op het gegevenstabblad en druk op + teken om een rij toe te voegen. Dubbelklik op de BLOB-kolom en er wordt een wizard geopend. Het uiterst linkse pictogram laadt een afbeelding in de blob:
SQL Developer heeft een vergelijkbare functie. Zie de link "Laden" hieronder:
Als u afbeeldingen over de draad moet trekken, kunt u dit doen met pl/sql, maar het is niet eenvoudig. Eerst moet u toegang tot de ACL-lijst instellen (om veiligheidsredenen) zodat een gebruiker de draad kan overnemen. Zie dit artikel voor meer informatie over ACL-configuratie.
Ervan uitgaande dat ACL voltooid is, zou je de afbeelding als volgt trekken:
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;
Ik hoop dat dat helpt.