sql >> Base de Datos >  >> RDS >> Oracle

Insertar imagen en BLOB Oracle 10g

No puede acceder a un directorio local desde pl/sql. Si usa bfile, configurará un directorio (crear directorio) en el servidor donde se ejecuta Oracle, donde deberá colocar sus imágenes.

Si desea insertar un puñado de imágenes desde su máquina local, necesitará una aplicación del lado del cliente para hacerlo. Puedes escribir el tuyo propio, pero normalmente uso Toad para esto. En el navegador de esquemas, haga clic en la tabla. Haga clic en la pestaña de datos y presione el signo + para agregar una fila. Haga doble clic en la columna BLOB y se abrirá un asistente. El icono del extremo izquierdo cargará una imagen en el blob:

SQL Developer tiene una característica similar. Consulte el enlace "Cargar" a continuación:

Si necesita pasar imágenes por el cable, puede hacerlo usando pl/sql, pero no es sencillo. En primer lugar, deberá configurar el acceso a la lista de ACL (por razones de seguridad) para permitir que un usuario se desvíe del cable. Consulte este artículo para obtener más información sobre la configuración de ACL.

Suponiendo que ACL esté completo, extraería la imagen de esta manera:

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 ayude.