BLOB datos PDF

cessaar1
03 de Septiembre del 2004
Hola. tengo un problema con el tipo de datos blob, sucede que intento actualizar e insertar datos en campos de dato de tipo BLOB a una tabla. En especifico quiero subir un archivo PDF, pero no encuentro la forma. Ya intente con el empty_blob() y no hayo la forma de indicarle que me suba el archivo ubicado en alg煤n directorio en especifico. 驴alguien me puede ayudar?

Jorge-DBA
03 de Septiembre del 2004
Que tal Cesar:

Creo entender que lo que necesitas es subir informaci贸n de texto binaria no estructurada con formato PDF, si es asi, Tengo una Base de datos donde subi PDF's, se suben con el Store Procedure de Oracle

"dbms_lob"

Existen varias formas de subir esta informaci贸n, te envio un ejemplo:

Paso 1:

crear en el Database Server un path V谩lido y escribes tu archivo PDF en dicho path:

Ejemplo:

C:temp

Paso 2

Dentro de tu base de datos, crear un usuario con privilegios de Resource y connect y asignar un tablespace exclusivo para la carga de PDF's

Paso 4:

Crear el directorio en la base de datos con un usuario con privilegios de sysdba

ejemplo:

SQL> connect / as sysdba

SQL> create directory dir_pdfs as 'C:temp'
/

Paso 3:

Desde un usuario con privilegios de sysdba concedes el privilegio de READ al usuario donde que creamos en el paso 2:

Ejemplo

SQL> connect / as sysdba

SQL>grant read on directory "DIR_PDFS" to user
/

Paso 4:
Creas la tabla en el usuario que creamos en el paso 2 e insertas un registro de la siguinete manera:

create table pdffiles (id number(3) primary key, description varchar2(20), text blob default empty_blob())
/
insert into pdffiles(id, description) values(1, 'InterMedia Concepts');
commit;

Paso 5:

Creas un Store procedure indicando que vamos a almecenar la informaci贸n por medio de bloques PLSQL.

CREATE OR REPLACE PROCEDURE loadpdf IS
Dest_loc BLOB;
Src_loc BFILE := BFILENAME('DIR_PDFS', 'archivo.pdf');
Amount INTEGER := 16165;
BEGIN
update tab_rep_pdf set id=1;
SELECT text INTO Dest_loc FROM pdffiles WHERE id = 1 FOR UPDATE;
/* Opening the LOB is mandatory: */
DBMS_LOB.OPEN(Src_loc, DBMS_LOB.LOB_READONLY);
/* Opening the LOB is optional: */
DBMS_LOB.OPEN(Dest_loc, DBMS_LOB.LOB_READWRITE);
DBMS_LOB.LOADFROMFILE(Dest_loc, Src_loc, Amount);
/* Closing the LOB is mandatory if you have opened it: */
DBMS_LOB.CLOSE(Dest_loc);
DBMS_LOB.CLOSE(Src_loc);
COMMIT;
END;
/

En la linea:
Src_loc BFILE := BFILENAME('DIR_PDFS', 'archivo.pdf');
"'archivo.pdf' es tu nombre de tu archivo PDF
y en la linea:
Amount INTEGER := 16165;
Pones la medida en bytes del archivo.

y ejecutas el storeprocedure:

SQL>execute loadpdf

cuando ejecutes el StoreProcedure creado lo que har谩 ser谩 un update actualizando el registro creado inicialmente y teniendo en el campo BLOB el archivo PDF.

Espero que te sea de utilidad esta informaci贸n

Saludos:

Jorge-DBA