您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > blob字段存储文件并读取
blob字段存储文件并读取文档或图片等文件在数据库表中以blob字段存储并读取的方法:1、将文件以blob形式存放到数据库:参考(IDnumber,photoBLOB);--首先要创建目录将需要存放到数据库的文件放到该目录中createorreplacedirectoryimagesas'D:\images';SELECT*FROMdba_directories--然后将这些文件读取存放到数据库declarel_bfilebfile;l_blobblob;begininsertintoyuser(ID,photo)values(1,empty_blob())returnphotointol_blob;l_bfile:=bfilename('IMAGES','...test.doc');dbms_lob.open(l_bfile,dbms_lob.file_readonly);dbms_lob.loadfromfile(l_blob,l_bfile,dbms_lob.getlength(l_bfile));dbms_lob.close(l_bfile);commit;end;2.Oracle导出Blob存储的图像或文件到指定目录:参考首先要先创建这些文件读取后存放的目录createorreplacedirectoryimages2as'D:\images2';CREATEORREPLACEPROCEDUREb_wzzp_dump(locationnoINNUMBER,filenameINVARCHAR2)ISl_fileutl_file.file_type;l_bufferRAW(32767);l_amountBINARY_INTEGER:=32767;l_posINTEGER:=1;l_blobBLOB;l_blob_lenINTEGER;BEGINSELECTphotoINTOl_blobFROMyuserWHEREid=locationno;l_blob_len:=dbms_lob.getlength(l_blob);l_file:=utl_file.fopen('IMAGES2',filename,'w',/*l_blob_len*/32767);WHILEl_posl_blob_lenLOOPdbms_lob.read(l_blob,l_amount,l_pos,l_buffer);utl_file.put_raw(l_file,l_buffer,TRUE);l_pos:=l_pos+l_amount;ENDLOOP;utl_file.fclose(l_file);EXCEPTIONWHENOTHERSTHENdbms_output.put_line(SQLERRM);IFutl_file.is_open(l_file)THENutl_file.fclose(l_file);ENDIF;RAISE;ENDb_wzzp_dump;executeb_wzzp_dump(locationno=指定表中的哪个文件,filename=filename);上述用到的一些包过程说明:dbms_lob.read——读取文件dbms_lob.read(lob_loc=blob字段,amount=每次读取的字符数,offset=从哪开始读取,buffer=缓存量);dbms_lob.getlength——获取blob对象的长度dbms_lob.getlength(lob_loc=对应的bLOB字段);utl_file.fopen——打开文件utl_file.fopen(location=文件所在的目录,filename=文件名称,open_mode=打开方式(R/W/A),max_linesize=文件每行最大的字符数,不能超过32767,最小为1,默认为null,表示操作系统运行时指定的值);注:max_linesize不能超过32767,如果超过则提示“ORA-29287:最大行大小无效”utl_file.put_raw——将raw数据写入文件utl_file.put_raw(file=文件类型,buffer=存放raw数据的缓存,autoflush=是自动刷新缓冲区数据);utl_file.is_open——判断文件是否打开,返回true或falseutl_file.is_open(file=文件名);utl_file.fclose——关闭文件utl_file.fclose(file=文件名);
本文标题:blob字段存储文件并读取
链接地址:https://www.777doc.com/doc-2900681 .html