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