Almacenar ficheros en BBDD

Estoy desarrollando en Visual basic.NET atacando a una bbdd Oracle 8.1.7 y necesito almacenar en una tabla archivos de Crystal Report en formato binario para poder recuperarlos desde una aplicación. Lo he intentado con tipos de datos BFile, Blob, Long Raw... Pero no consigo almacenar nada

1 respuesta

Respuesta
1
No! No lo hagas!
Siempre te va a convenir usar la BD, ¿a ver master que error de Oracle te da? Por favor poné el código que da error, la linea y el error...
;=)
Muchas gracias, pero ... ya había probado con los Blob, el problema es que no consigo hacer los insert en la tabla, ni con procedimientos almacenados ni de ninguna manera, y no encuentro en ninguna web documentación al respecto ¿podrías ayudarme con eso o mejor paso de todo y me dedico a ser feliz y almaceno los ficheros en un directorio en el pc directamente en vez de en la bbdd? Gracias! :)
BLOB con toda seguridad!
Blob BLOB significa "Binary Large OBject" (Objecto Grande Binario). En realidad no necesita ser tan grande, aunque Oracle le permitirá almacenar hasta 4 GB. El tipo de dato BLOB fue creado para permitir el almacenamiento de imágenes, grabaciones de sonido y otras cosas inherentemente binarias. En la prática, también es usado por vendedores fraudulentos de software de aplicación. Ellos pasan unos años chapuseando un formato feo de su propiedad. Sus clientes con MBAs exigen que toda la cosa sea basada en un RDBMS. El vendedor de software aprende lo suficiente sobre Oracle para "meter todo en un BLOB". Luego todas las personas de mercadeo y ventas están contentas porque la aplicación ahora está corriendo sobre Oracle en lugar del sistem de archivos. Tristemente, los programadores y usuarios no reciben mucho porque no se pueda usar SQL muy efectivamente para hacer queries con o actualizar lo que está dentro de un BLOB.
;=)
Muchas gracias por tu ayuda, si me funciona te debo una! :)
Debes insertar el registro con un BLOB vacío usando empty_blob() insert into tabla (1, empty_blob()); para luego actualizar el registro cargando la imagen con un paquete llamado dbms_lob. Loadfromfile(debes investigar que parámetros pasarle)
Otra forma sería...
create or replace procedure load_image1(file_name varchar)
as
obj ORDSYS.ORDImage;
ctx raw(4000):=null;
nxtseq number;
thisrowid urowid;
BEGIN
select imageseq1.nextval into nxtseq from dual;
insert into images (item_id,pict) values (
Nxtseq,
ORDSYS. ORDImage
(ORDSYS.ORDSOURCE(EMPTY_BLOB(),
'FILE','IMAGEDIR', file_name, null, null),
Null, null, null, null, null, null, null))
returning rowid into thisrowid;
select t.pict into obj from images t
where rowid = thisrowid for update;
obj.import(ctx);
update images t set t.pict=obj
where rowid = thisrowid;
commit;
END;
/
Éxitos!
;=)

Añade tu respuesta

Haz clic para o
El autor de la pregunta ya no la sigue por lo que es posible que no reciba tu respuesta.

Más respuestas relacionadas