Oracle系列:图片的存储

来源:互联网 发布:删除的数据怎么恢复 编辑:程序博客网 时间:2024/04/28 01:17


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

原创粉丝点击