Guardar una imagen en un campo Blob
El siguiente código de ejemplo guarda la imagen c:imagenmiimagen.gif en la tabla T_imagenes que tiene la siguiente estructura:
SQL> Desc T_imagenes
| field |
|
type |
| id |
|
varchar2(20) |
| img |
|
Blob |
|
|
|
el campo img es un campo blob donde se almacenará el contenido del archivo de imagen.
Hay 3 aspectos a tener en cuenta:
1. Definir para la bd oracle, un directorio asociado a la carpeta del sistema operativo donde se encuentra la imagen (c:imagen).
SQL> create directory IMAGEN_DIR as 'c:imagen';
2. Definir permisos de lectura al usuario que carga la imagen a la bd. Si por ejemplo el usuario se llama usuariopruebas, la sentencia sql sería:
SQL> grant read on directory IMAGEN_DIR to usuariopruebas;
3. Adicionar el código para la carga. En este caso, se creará un procedimiento llamado agregaImagen, cuyos parámetros de entrada son el directorio y el nombre del archivo a leer. El código del proc es:
CREATE OR REPLACE PROCEDURE agregaImagen (directorio IN varchar2, archivoImagen IN varchar2) as
f_lob bfile;
b_lob blob;
BEGIN
f_lob := bfilename(directorio, archivoImagen);
INSERT INTO T_imagenes VALUES ( 'id1', empty_blob() )
RETURNING img into b_lob;
--Abrir archivo
dbms_lob.fileopen(f_lob,dbms_lob.file_readonly);
--Leer archivo
dbms_lob.loadfromfile( b_lob, f_lob, dbms_lob.getlength (f_lob) );
--Cerrar archivo
dbms_lob.fileclose(f_lob);
commit;
END;
Ahora, para completar el ejercicio, se ejecuta el procedimiento agregaImagen con los parámetros IMAGEN_DIR y el nombre del archivo a cargar.
SQL> execute agregaImagen('IMAGEN_DIR','miimagen.gif')