Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Inserindo Imagem no BLOB Oracle 10g


Você não pode acessar um diretório local do pl/sql. Se você usar bfile, você irá configurar um diretório (create directory) no servidor onde o Oracle está rodando onde você precisará colocar suas imagens.

Se você quiser inserir um punhado de imagens de sua máquina local, precisará de um aplicativo do lado do cliente para fazer isso. Você pode escrever o seu próprio, mas eu normalmente uso o Toad para isso. No navegador de esquema, clique na tabela. Clique na guia de dados e pressione o sinal + para adicionar uma linha. Clique duas vezes na coluna BLOB e um assistente será aberto. O ícone da extrema esquerda carregará uma imagem no blob:



O SQL Developer tem um recurso semelhante. Veja o link "Carregar" abaixo:



Se você precisar puxar imagens pelo fio, você pode fazê-lo usando pl/sql, mas não é simples. Primeiro, você precisará configurar o acesso à lista ACL (por motivos de segurança) para permitir que um usuário puxe o fio. Consulte este artigo para obter mais informações sobre a configuração da ACL.

Supondo que a ACL esteja completa, você extrairia a imagem assim:
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;

Espero que ajude.