Oracle - tratamiento dbms_lob

 
Vista:

tratamiento dbms_lob

Publicado por diego (39 intervenciones) el 22/06/2007 14:46:28
Buenas tardes,
Estoy intentando meter un pdf en base de datos y estoy utilizando este procedimiento:
create or replace procedure pdf is
b_lob blob;
f_lob bfile;
begin
insert into prueba(nombre,pdf) values ('1',empty_blob())
return pdf into b_lob;
f_lob :=bfilename('C:','LIQUICON2007.pdf');
dbms_lob.fileopen(f_lob,dbms_lob.file_readonly);
dbms_lob.loadfromfile(b_lob, f_lob, dbms_lob.getlength(f_lob));
dbms_lob.fileclose(f_lob);
commit;
end;

Pero cuando ejecuto el procedimiento me da el siguiente error:
ORA-22285: non-existent directory or file for FILEOPEN operation
ORA-06512: at "SYS.DBMS_LOB", line 504
ORA-06512: at "PRESUPUESTO_RED.PDF", line 8
ORA-06512: at line 3

No lo entiendo porque en C si existe ese pdf.¿Puede ser por problema de permisos?
He dado permisos a ese pdf y me sigue fallando
Ayuda,por favor
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:tratamiento dbms_lob

Publicado por mad (88 intervenciones) el 22/06/2007 19:17:20
El directorio que no existe es el de oracle, la libreria que utilizas usa solo directorios de oracle.
Tienes que crearte un directorio donde tengas almacenados los pdf, por ejemplo

create or replace directory DIR_PDF as 'c:\mis_pdf';

Despues debes hacer referencia a ese directorio.

Espero te sirva
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:tratamiento dbms_lob

Publicado por DIEGO (39 intervenciones) el 25/06/2007 08:55:12
Lo he creado y ahora me da este error:
ORA-22288: file or LOB operation FILEOPEN failed
The system cannot find the path specified.
La ruta es c:\PDF\ y si que existe.
Estoy muy perdido
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:tratamiento dbms_lob

Publicado por mad (88 intervenciones) el 25/06/2007 09:38:41
Deberia funcionarte, quitale no obstante la ultima barra, C:\PDF

Tambien tienes que dar permisos al directorio:

GRANT ALL ON DIRECTORY mi_directorio TO PUBLIC;

Espero te sirva.
Salu2.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:tratamiento dbms_lob

Publicado por diego (39 intervenciones) el 25/06/2007 09:42:14
No hay manera.He hecho todo lo que me dices y sigue danto error.
Este es mi codigo:
create or replace procedure pdf is
b_lob blob;
f_lob bfile;
directorio constant varchar2(20):='DIR_PDF';
begin
insert into prueba(nombre,pdf) values ('1',empty_blob())
return pdf into b_lob;
f_lob :=bfilename(directorio,'LIQUICON2007.pdf');
dbms_lob.fileopen(f_lob,dbms_lob.file_readonly);
dbms_lob.loadfromfile(b_lob, f_lob, dbms_lob.getlength(f_lob));
dbms_lob.fileclose(f_lob);
commit;
end;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:tratamiento dbms_lob

Publicado por mad (88 intervenciones) el 25/06/2007 10:35:37
Estoy mirando en mis proyectos, y creia que utilizaba rutas en local, pero no, creo que debes crearte un directorio en el servirdor y copiar los ficheros en esa ruta para poder acceder a ellos.
Aunque, tambien veo que los guardas en bbdd. ¿no puedes utilizar la webutil?, con el comando "host" podras ejecutar el programa asociado al fichero que quieras abrir:

WEBUTIL_HOST.HOST('cmd /c'||fichero);
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:tratamiento dbms_lob

Publicado por diego (39 intervenciones) el 26/06/2007 13:16:48
No puedo utilizar webutil.
Gracias por tu ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:tratamiento dbms_lob

Publicado por wilson (1 intervención) el 18/07/2007 16:46:56
si no es tarde para resolver tu problema, yo puedo ayudarte

lo primero que debes hacer es identificar el sistema operativo en el que corre tu base de datos.. dependiendo de eso puedese crear tu directorio. por ejemplo:

si la base de datos está en un windows el direcotiros que vas a crear en la base de datos debe c:\xxx\

si base de datos esta en un servidor Linux la el direcotiro a crear debe tener la siguiente ruta /xxx/xx,

Algo que debes de considerar es que tu procedimiento lo ejecutas en el servidor y es ahi donde va a buscar la ruta. por ejemplo si tu tienes creada tu ruta como c:\pdf y tienes un servidor linux nunca va a encontrar esa ruta en el servidor porque la raiz no se define de esa manera sino con / .

espero te sirva
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar