Ответ 1
Вы не можете получить доступ к локальному каталогу из pl/sql. Если вы используете bfile, вы создадите каталог (создать каталог) на сервере, где работает Oracle, где вам нужно будет поместить ваши изображения.
Если вы хотите вставить несколько изображений с вашего локального компьютера, для этого вам понадобится приложение на стороне клиента. Вы можете написать свой собственный, но я обычно использую Toad для этого. В браузере схемы нажмите на таблицу. Перейдите на вкладку данных и нажмите + знак, чтобы добавить строку. Дважды щелкните столбец BLOB, и откроется мастер. Значок в левом углу загрузит изображение в блок:
SQL Developer имеет аналогичную функцию. См. Ссылку "Загрузить" ниже:
Если вам нужно потянуть изображения по проводу, вы можете сделать это, используя pl/sql, но не прямолинейно. Во-первых, вам нужно настроить доступ к списку ACL (по соображениям безопасности), чтобы пользователь мог потянуть за провод. См. эту статью для получения дополнительной информации об установке ACL.
Предполагая, что ACL завершен, вы потянете изображение следующим образом:
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;
Надеюсь, что это поможет.