关于blob 图片的读取到文件 
create or replace procedure load_blob(f_name char) is
sourfile bfile;
destfile blob;
file_length number(8, 1);
begin
insert into h
(name, contect)
values
(f_name, empty_blob())
returning contect into destfile;
sourfile := bfilename('DIR1', f_name);
dbms_lob.fileopen(sourfile, dbms_lob.file_readonly);
file_length := dbms_lob.getlength(sourfile);
dbms_lob.loadfromfile(destfile, sourfile, file_length);
update h set c_length = file_length where name = f_name;
dbms_lob.fileclose(sourfile);
commit;
exception
when others then
update h set c_length = -1 where name = f_name;
dbms_lob.filecloseall;
end load_blob;本人用以上过程成功地将图片a.jpg导入到了h.contect字段中.
但本人又想从h.contect中将图片导出到文件中,用以上过程,导出的文件却怎么也打不开,有高手可以帮我看看不?create or replace procedure dump_blob is
FILE_HANDLE UTL_FILE.FILE_TYPE;
file_blob blob;
file_len integer;
l_buffer RAW(32767);
l_amount BINARY_INTEGER := 32767;
l_pos INTEGER := 1;
BEGIN
select contect into file_blob from h;
file_len := DBMS_LOB.GETLENGTH(file_blob);
file_handle := UTL_FILE.FOPEN('DIR1', '1.jpg', 'w');
WHILE l_pos < file_len LOOP
if (file_len - l_pos) >= 32767 then
l_amount := 32767;
else
l_amount := file_len - l_pos + 1;
end if;
DBMS_LOB.READ(file_blob, l_amount, l_pos, l_buffer);
UTL_FILE.PUt(file_handle, l_buffer);
l_pos := l_pos + l_amount;
END LOOP;
UTL_FILE.FCLOSE(FILE_HANDLE);
dbms_lob.filecloseall;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN;
WHEN UTL_FILE.INVALID_PATH THEN
DBMS_OUTPUT.PUT_LINE('INVALID PATH');
WHEN UTL_FILE.INVALID_MODE THEN
DBMS_OUTPUT.PUT_LINE('INVALID MODE');
WHEN UTL_FILE.INVALID_FILEHANDLE THEN
DBMS_OUTPUT.PUT_LINE('INVALID FILEHANDLE');
WHEN UTL_FILE.INVALID_OPERATION THEN
DBMS_OUTPUT.PUT_LINE('INVALID OPERATION');
WHEN UTL_FILE.READ_ERROR THEN
DBMS_OUTPUT.PUT_LINE('READ ERROR');
WHEN UTL_FILE.WRITE_ERROR THEN
DBMS_OUTPUT.PUT_LINE('WRITE ERROR');
WHEN UTL_FILE.INTERNAL_ERROR THEN
DBMS_OUTPUT.PUT_LINE('INTERNAL ERROR');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('OTHER ERROR=' || SQLERRM);
end hyf_dump_blob;