oracle存储过程图片的存储或二进制文件的存储
四, 图片的存储或二进制文件的存储
1,先插入普通数据,遇到大对象列使用empty_blob()构造空的指针。
例子:
/* Formatted on 2009-12-24 18:02:34 (QP5 v5.115.810.9015) */
CREATE TABLESPACE Dave DATAFILE ‘D:/Dave/dave.dbf’ SIZE 20M;
Create Table MyLob
(
no number(8) primary key,
fname varchar2(30),
myfile blob
)
Lob (myfile) Store As
(
Tablespace Dave
Chunk 15K
Disable Storage In Row
);
INSERT INTO MyLob
VALUES (1, ‘IMG_0210.JPG’, EMPTY_BLOB ());
2,创建逻辑目录MYDIR
Create Directory MYDIR As ‘ D:/Dave’;
3,声明一个BLOB类型变量,使用select into 语句让其指向到empty_blob()构造空的指针所指向的存储空间
/* Formatted on 2009-12-24 18:07:25 (QP5 v5.115.810.9015) */
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’,’Dave.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(‘Dave.JPG’);
–查看文件大小
Declare
varB blob;
Begin
select myfile into varB from myLob where no = 2;
DBMS_output.put_line(‘长度为: ‘||DBMS_LOB.getlength(varB));
End;
声明: 除非转自他站(如有侵权,请联系处理)外,本文采用 BY-NC-SA 协议进行授权 | 嗅谱网
转载请注明:转自《oracle存储过程图片的存储或二进制文件的存储》
本文地址:http://www.xiupu.net/archives-297.html
关注公众号:
微信赞赏
支付宝赞赏