BLOB -> Fichero
Hola a todos;
Tengo almacenados ficheros en una tabla de Oracle como campos de tipo BLOB. ¿Existe alguna función PL/SQL para extraer el campo de tipo BLOB de la base de datos y generar el fichero en cualquier lugar del disco? He estado mirando el package DBMS_LOB y no he encontrado nada
Alguien me puede ayudar
Un saludo
Txarly
Tengo almacenados ficheros en una tabla de Oracle como campos de tipo BLOB. ¿Existe alguna función PL/SQL para extraer el campo de tipo BLOB de la base de datos y generar el fichero en cualquier lugar del disco? He estado mirando el package DBMS_LOB y no he encontrado nada
Alguien me puede ayudar
Un saludo
Txarly
Hay que usar el paquete dbms_lob, los bfile y los directory.
Se crea un objeto DIRECTORY indicando donde está el fichero a cargar:
CREATE OR REPLACE DIRECTORY \\'DIRECTORIO\\' as \\'/private1/LOB/files\\';
Donde \\'DIRECTORIO\\' es un identificador que nosotros le damos y \\'/private1/LOB/files\\' es el path donde vamos a poner los ficheros a cargar.
Se lanza algo como lo siguiente:
declare
lobd BLOB;
fils BFILE;
amt number;
BEGIN
fils:=BFILENAME(\\'DIRECTORIO\\', \\'fichero.jpg\\');
DBMS_LOB.FILEOPEN(fils, dbms_lob.file_readonly);
amt:=dbms_lob.GETLENGTH( fils );
dbms_lob.CREATETEMPORARY(lobd,false);
DBMS_LOB.LOADFROMFILE(lobd, fils, amt);
update \"nombretabla\" set \"columnablob\"=lobd where \"condicion\";
COMMIT;
DBMS_LOB.FILECLOSE(fils);
END;
Donde fichero.jpg es el nombre del fichero a cargar, \"nombretabla\" la tabla donde lo cargamos, \"columnablob\" la columna tipo blob y \"condicion\" las condiciones que queramos poner en el where. Por supuesto en lugar de un update podría ser un insert.
Se crea un objeto DIRECTORY indicando donde está el fichero a cargar:
CREATE OR REPLACE DIRECTORY \\'DIRECTORIO\\' as \\'/private1/LOB/files\\';
Donde \\'DIRECTORIO\\' es un identificador que nosotros le damos y \\'/private1/LOB/files\\' es el path donde vamos a poner los ficheros a cargar.
Se lanza algo como lo siguiente:
declare
lobd BLOB;
fils BFILE;
amt number;
BEGIN
fils:=BFILENAME(\\'DIRECTORIO\\', \\'fichero.jpg\\');
DBMS_LOB.FILEOPEN(fils, dbms_lob.file_readonly);
amt:=dbms_lob.GETLENGTH( fils );
dbms_lob.CREATETEMPORARY(lobd,false);
DBMS_LOB.LOADFROMFILE(lobd, fils, amt);
update \"nombretabla\" set \"columnablob\"=lobd where \"condicion\";
COMMIT;
DBMS_LOB.FILECLOSE(fils);
END;
Donde fichero.jpg es el nombre del fichero a cargar, \"nombretabla\" la tabla donde lo cargamos, \"columnablob\" la columna tipo blob y \"condicion\" las condiciones que queramos poner en el where. Por supuesto en lugar de un update podría ser un insert.
