BLOB datos PDF
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?
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
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
