Administrador Base de Datos Oracle

Páginas: 8 (1964 palabras) Publicado: 4 de julio de 2013
Trabajar con datos de tipo BLOB en ORACLE
    En este artículo vamos a explicar como podemos trabajar con datos binarios en ORACLE. Los datos binarios nos van a permitir guardar en la base de datos archivos, imagenes, sonidos, etc ...
     Casi siempre es preferible guardar la ruta del archivo en la base de datos en lugar del propio archivo en modo binario, pero existen ciertas circunstanciasen las que no nos queda otra solución.
    Lo que vamos a hacer es cargar un fichero existente en el servidor en un campo BLOB de una tabla.
    Lo primero que debemos hacer es crear un objeto directorio, esto es necesario ya que el fichero que queremos guardar se encuentra en el servidor (PL/SQL se ejecuta en el servidor), y debemos permitir explicitamente el acceso al directorio en cuestión alusuario que ejecutará el PL. El siguiente script SQL crea el directorio (¡ojo! el objeto ORACLE directorio, no el directorio físico del servidor que debe existir), asigandole el nombre lógico images. Para poder crear el directorio debemos haber iniciado session como dba.

CONNECT sys/&password@ORACLEBD as sysdba;
CREATE OR REPLACE
DIRECTORY IMAGES AS 'C:\ORACLE\BLOB\IMAGES';
    Como yahemos dicho, para crear directorios debemos haber iniciado la sessión con permisos de dba, por lo que debemos asignar permisos a los usuarios que necesitemos o queramos. 

GRANT READ ON DIRECTORY IMAGES to APP1 WITH GRANT OPTION;
GRANT READ ON DIRECTORY IMAGES to PUBLIC;
    Lo siguiente que vamos a necesitar es una tabla con un campo BLOB, para almacenar la imagen. En este caso vamos a llamar ala tabla "archivos", y su estructura será la siguiente:

CREATE TABLE ARCHIVOS
(CO_ARCHIVO     VARCHAR2(6)   not null,
 NOMBRE_ARCHIVO VARCHAR2(100) not null,
 BIN            BLOB              null,
 FX_ALTA        DATE              null,
 CONSTRAINT PK_ARCHIVOS PRIMARY KEY (CO_ARCHIVO)
 )
    El siguiente bloque de PL nos va a permitir cargar una imagen, llamada "imagen.gif" en latabla. Es importante tener claro que el archivo "imagen.gif" debe existir físicamente el directorio IMAGES (C:\ORACLE\BLOB\IMAGES) que hemos creado anteriormente.

DECLARE
  l_bfile  BFILE;
  l_blob   BLOB;
BEGIN
  INSERT INTO ARCHIVOS
(CO_ARCHIVO, NOMBRE_ARCHIVO, BIN, FX_ALTA)
  VALUES
('000001','imagen.gif',EMPTY_BLOB(),SYSDATE)
RETURN BIN INTO l_blob;


 
l_bfile :=BFILENAME('IMAGES', 'imagen.gif');
  DBMS_LOB.fileopen(l_bfile, Dbms_Lob.File_Readonly);
  DBMS_LOB.loadfromfile(l_blob,l_bfile,DBMS_LOB.getlength(l_bfile));
  DBMS_LOB.fileclose(l_bfile);
  COMMIT;

EXCEPTION WHEN OTHERS THEN
   ROLLBACK;
   RAISE;
END;

    Hay tres aspectos a comentar de este código:
El uso de RETURN en la sentencia INSERT. Nos permite establecer una referencia alcampo BIN insertado en la variable l_blob, de tipo BLOB.
La función EMPTY_BLOB.Nos permite insertar un valor nulo en un campo BLOB.
La función BFILENAME. Esta función devuelve un objeto BFILE que representa la ruta del fichero "imagen.gif" que queremos almacenar en la tabla.
El uso del paquete predefinido de ORACLE DBMS_LOB. Es el paquete que proporciona ORACLE para trabajar con tipos binarios.Utilizamos la siguientes funciones:
fileopen: Abre el archivo definido por BFILE (l_bfile) en el modo indicado (en nuestro caso solo lectura Dbms_Lob.File_Readonly)
loadfromfile: Lee un determinado número de bytes (en nuestro caso todos) del fichero definido por BFILE(l_bfile) en un objeto de tipo BLOB (l_blob).
getlength:Devuelve el tamaño del archivo en bytes.
fileclose:Cierra el archivo
   Llama la atención de este código que a persar de haber insertado el campo BIN vacio con la función EMPTY_BLOB, finalmente queda cargado sin ejecutar ninguna sentencia UPDATE. Esto ocurre porque  estamos utilizando RETURN en la sentencia INSERT y guardando una referencia al campo BIN que posteriormente asignamos al leer el archivo con DBMS_LOB.loadfromfile.
    El resultado de todo esto es que...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Oracle Base De Datos
  • Mondrian con una base datos oracle
  • Base De Datos Oracle
  • Proyecto base de datos oracle
  • Base De Datos Oracle
  • bases de datos oracle
  • Base De Datos Oracle Resumen
  • Arquitectura base de datos oracle

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS