oracle数据库可以存图片吗,如何往数据库(Oracle)里存储图片和文件

SQL> drop table IMAGE_LOB;

表已丢弃。

SQL> CREATE TABLE IMAGE_LOB (

2  T_ID VARCHAR2 (5) NOT NULL,

3  T_IMAGE BLOB NOT NULL

4  );

表已创建。

SQL> CREATE OR REPLACE DIRECTORY IMAGES AS 'C:/Inetpub/wwwroot';

目录已创建。

SQL> CREATE OR REPLACE PROCEDURE IMG_INSERT (

2  TID           VARCHAR2,

3  FILENAME      VARCHAR2) AS

4     F_LOB   BFILE;

5     B_LOB   BLOB;

6   BEGIN

7       INSERT INTO IMAGE_LOB (T_ID, T_IMAGE) VALUES (TID,

8  EMPTY_BLOB ()) RETURN T_IMAGE INTO B_LOB;

9       F_LOB:= BFILENAME ('IMAGES', FILENAME);

10       DBMS_LOB.FILEOPEN (F_LOB, DBMS_LOB.FILE_READONLY);

11       DBMS_LOB.LOADFROMFILE (B_LOB, F_LOB,

12  DBMS_LOB.GETLENGTH (F_LOB));

13       DBMS_LOB.FILECLOSE (F_LOB);

14       COMMIT;

15   END;

16  /

过程已创建。

SQL> BEGIN

2      IMG_INSERT('1','win2000.gif');

3   END;

4  /

PL/SQL 过程已成功完成。

SQL> select length(t_image) from image_lob where t_id='1';

LENGTH(T_IMAGE)

---------------

4670

//先建立表 lob_example1

create table lob_example1(

id number(6) primary key,

name varchar2(10),

resume clob

);

//插入数据

insert into lob_example1 values(1,'猪',empty_clob());

insert into lob_example1 values(2,'狗',empty_clob());

commit;

//创建目录

CREATE OR REPLACE DIRECTORY DOCS AS 'C:/';

//创建将文件内容写入数据库CLOB的存储过程

CREATE OR REPLACE PROCEDURE update_doc(

t_id  number,

filename varchar2

)

as

lobloc clob;

fileloc bfile;

amount int;

src_offset int:=1;

dest_offset int:=1;

csid int:=0;

lc  int:=0;

warning int;

begin

fileloc:=bfilename('DOCS',filename);

dbms_lob.fileopen(fileloc,0);

amount:=dbms_lob.getlength(fileloc);

select resume into lobloc from lob_example1

where id=t_id for update;

dbms_lob.loadclobfromfile(lobloc,fileloc,amount,dest_offset,src_offset,csid,lc,warning);

dbms_lob.fileclose(fileloc);

commit;

end;

//调用存储过程,把文件读入数据库CLOB中

call update_doc(1,'aa.csv');

call update_doc(2,'bb.csv');

//察看id是2和1的行中文件大小

select length(resume) from lob_example1 where id=2;

select length(resume) from lob_example1 where id=1;

/文件已经放入数据库

//将文件从数据库clob中读出来CREATE OR REPLACE PROCEDURE get_doc(   t_id  number,   filename varchar2    )as   lobloc clob;   amount int;   offset int:=1;   buffer varchar2(2000);   handle utl_file.file_type;begin   select resume into lobloc from lob_example1 where id=t_id;   amount:=dbms_lob.getlength(lobloc);   dbms_lob.read(lobloc,amount,offset,buffer);   handle:=utl_file.fopen('DOCS',filename,'w',2000);   utl_file.put_line(handle,buffer);   utl_file.fclose(handle);end;/ //调用这个过程,把文件读出来call get_doc(1,'zz.csv');

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值