Oracle
 sql >> Database >  >> RDS >> Oracle

Inserimento dell'immagine in BLOB Oracle 10g

Non è possibile accedere a una directory locale da pl/sql. Se usi bfile, configurerai una directory (create directory) sul server su cui è in esecuzione Oracle in cui dovrai inserire le tue immagini.

Se vuoi inserire una manciata di immagini dal tuo computer locale, avrai bisogno di un'app lato client per farlo. Puoi scrivere il tuo, ma in genere uso Toad per questo. Nel browser degli schemi, fare clic sulla tabella. Fai clic sulla scheda dati e premi il segno + per aggiungere una riga. Fare doppio clic sulla colonna BLOB e si apre una procedura guidata. L'icona all'estrema sinistra caricherà un'immagine nel BLOB:

SQL Developer ha una funzionalità simile. Vedi il link "Carica" ​​qui sotto:

Se hai bisogno di trascinare le immagini sul filo, puoi farlo usando pl/sql, ma non è semplice. Innanzitutto, dovrai configurare l'accesso all'elenco ACL (per motivi di sicurezza) per consentire a un utente di effettuare il passaggio. Consulta questo articolo per ulteriori informazioni sulla configurazione dell'ACL.

Supponendo che ACL sia completo, estrarresti l'immagine in questo modo:

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;

Spero di esserti stato d'aiuto.