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