Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Acceder a la estructura interna de un objeto BLOB desde PL/SQL

Estas en el tema de Acceder a la estructura interna de un objeto BLOB desde PL/SQL en el foro de Oracle en Foros del Web. Hola, comunidad. Tengo un procedimiento que recibe una imagen como tipo de dato blob y la inserta en una tabla, pero necesito verificar varias condiciones ...
  #1 (permalink)  
Antiguo 09/05/2011, 16:43
Avatar de Kluster  
Fecha de Ingreso: agosto-2005
Ubicación: Cuba
Mensajes: 86
Antigüedad: 18 años, 8 meses
Puntos: 1
Acceder a la estructura interna de un objeto BLOB desde PL/SQL

Hola, comunidad.

Tengo un procedimiento que recibe una imagen como tipo de dato blob y la inserta en una tabla, pero necesito verificar varias condiciones -en pl/sql, o sea, una vez que la aplicación envió el fichero hacia la base de datos- antes de almacenarla, como que la cabecera del .jpg no esté dañada (que comience con FFD8...), que la extensión sea correcta, etc... para lo cual me hace falta acceder a la estructura binaria de ese blob, ya sea iterando sobre él como un arreglo de bytes o de cualquier otra forma.

Gracias.
  #2 (permalink)  
Antiguo 10/05/2011, 16:22
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 5 meses
Puntos: 85
Respuesta: Acceder a la estructura interna de un objeto BLOB desde PL/SQL

Puedes recorrer el blob por partes con DBMS_LOB y si necesitas evaluar el contenido de cada parte puedes utilizar UTL_RAW para hacer un casteo a lo que necesites, por ejemplo:

Código:
create or replace procedure p1
is
 data_r raw(16);
 data_v varchar2(255);
 un_blob blob;
 l number(8);
begin
 l := length('12345');
 --un varchar casteado a raw para insertar el contenido en el blob
 data_r := utl_raw.cast_to_raw('12345');
 insert into t1 values (empty_blob())
 returning foto into un_blob;
 dbms_lob.writeappend(un_blob, l, data_r);
 commit;
 
 --lectura del blob casteado a varchar para hacer un ouput por consola
 un_blob := null;
 data_r := null;
 data_v := null;
 select foto into un_blob
 from t1;
 dbms_lob.read(un_blob,l,1,data_r);
 data_v := utl_raw.cast_to_varchar2( data_r );
 dbms_output.put_line(data_v);
end;
/
Código:
SQL> exec p1;
12345

Procedimiento PL/SQL terminado correctamente.
Validar que la extensión de la foto sea .jpg no lo podrás hacer ya que en el blob se guarda solo el contenido de la imagen, no su nombre.

Saludos
  #3 (permalink)  
Antiguo 11/05/2011, 20:36
Avatar de Kluster  
Fecha de Ingreso: agosto-2005
Ubicación: Cuba
Mensajes: 86
Antigüedad: 18 años, 8 meses
Puntos: 1
Respuesta: Acceder a la estructura interna de un objeto BLOB desde PL/SQL

Gracias, Andrés... efectivamente, en el paquete DBMS_LOB están todas las funciones que necesito. Con el GETLENGTH y el SUBSTR casi resuelvo todos los problemas que tengo. :yes:

Etiquetas: acceder, blob, estructura, objeto
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:45.