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存储过程图片的存储或二进制文件的存储
本文地址:https://www.zhiletu.com/archives-297.html
关注公众号:智乐兔

赞赏

wechat pay微信赞赏alipay pay支付宝赞赏

上一篇
下一篇

相关文章

在线留言

你必须 登录后 才能留言!

在线客服
在线客服 X

售前: 点击这里给我发消息
售后: 点击这里给我发消息

智乐兔官微