Oracle系列:图片的存储


Oracle系列:图片的存储

一:什么是大对象,大对象基本操作?
 参见我的BLOG:Oracle系列:LOB大对象处理
 
http://blog.csdn.net/qfs_v/archive/2008/05/21/2464599.aspx
 
二,图片的存储或二进制文件的存储

 1,先插入普通数据,遇到大对象列使用empty_blob()构造空的指针。
  例子:
  /*
   conn scott/tiger;
   Create TableSpace ts5_21;
  */
   Create Table MyLob
   (
     no number(8) primary key,
     fname varchar2(30),
     myfile blob
   )
   Lob (myfile) Store As
   (
     Tablespace ts5_21
     Chunk 15K
     Disable Storage In Row
   );
  
  Insert Into MyLob Values(1,'IMG_0210.JPG',empty_blob());
 
 2,创建逻辑目录MYDIR
  Create Directory  MYDIR As 'E:/Oracle';
 
 3,声明一个BLOB类型变量,使用select into 语句让其指向到empty_blob()构造空的指针所指向的存储空间
    Select myfile Into BLOB类型变量  From myLob Where no = 1 FOR UPDATE;
 
 4,声明一个BFile类型变量,关联逻辑目录和物理目录文件,使用 BFileName() 将其指向到待存储的文件。
    BFile类型变量 := BFileName('MYDIR','IMG_0210.JPG');
 
 5,使用DBMS_LOB.open()方法将BFile类型变量所指向的文件打开
    DBMS_LOB.Open(BFile类型变量);
 
 6,使用DBMS_LOB.loadfromfile()方法将BFile类型变量所指向的文件读入到BLOB类型变量所指向的存储空间
    DBMS_LOB.LoadFromFile(BLOB类型变量,BFile类型变量,DBMS_LOB.getlength(BFile类型变量));
 
 7,使用DBMS_LOB.close()方法将bfile的变量所指向的文件关闭
    DBMS_LOB.Close(BFile类型变量);
 
 8,提交事务
    Commit;
 
 例子;
  Declare
     varB blob;
     varF Bfile;
  Begin
     select myfile into varB from myLob where no = 1 for update;
     varF := bfileName('MYDIR','IMG_0210.JPG');
     DBMS_LOB.open(varF);
    DBMS_LOB.loadfromfile(varB,varF,DBMS_LOB.getlength(varF));
     DBMS_LOB.close(varF);
     commit;
  End; 
  
  --查看文件大小
  Declare
     varB blob;
  Begin
     select myfile into varB from myLob where no = 1;
     DBMS_OUTPUT.PUT_LINE('长度为: '||DBMS_LOB.getlength(varB));
  End;
 
 例子:创建过程存储图片或二进制文件
  Create Or Replace Procedure setBLOB(vFileName varchar2)
  As
     varF bfile;
     varB blob;
     vno number(8);
  Begin
     varF := BFilename('MYDIR',vFileName);
     DBMS_LOB.Open(varF);
     select max(no) into vno from myLob;
     if vno is null then
       vno := 1;
     else
       vno := vno + 1;
     end if;
     insert into myLob values(vno,vFileName,empty_blob());
     select myFile into varB from myLob where no = vno for update;
     DBMS_LOB.loadfromfile(varB,varF,DBMS_LOB.getlength(varF));
     DBMS_LOB.close(varF);
     commit;
  End;
  
  --执行过程
  EXEC setBLOB('IMG_0210.JPG');
  
  --查看文件大小
  Declare
     varB blob;
  Begin
     select myfile into varB from myLob where no = 2;
     DBMS_output.put_line('长度为: '||DBMS_LOB.getlength(varB));
  End;
 

下一文:Oracle系列:SQL

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值