如何往数据库(Oracle)里存储图片和文件
2007-10-28 14:41
721 查看
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');
表已丢弃。
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');
相关文章推荐
- 如何往数据库(Oracle)里存储图片和文件?
- 数据库操作_连接SQL Server数据库示例;连接ACCESS数据库;连接到 Oracle 数据库示例;SqlCommand 执行SQL命令示例;SqlDataReader 读取数据示例;使用DataAdapter填充数据到DataSet;使用DataTable存储数据库表;将数据库数据填充到 XML 文件;10 使用带输入参数的存储过程;11 使用带输入、输出参数的存储过程示;12 获得数据库中表的数目和名称;13 保存图片到SQL Server数据库示例;14 获得插入记录标识号;Exce
- MySQL如何存储图片?---一个向数据库存取image文件的jsp程序
- MySQL如何存储图片?---一个向数据库存取image文件的jsp程序
- 数据库存储图片(MsSQL/ORACLE/ACCESS)
- 如何在oracle中导入dmp数据库文件
- Oracle数据库对于大对象二进制文件的存储及下载
- 在Oracle中存储图片、影像等大文件
- 如何在oracle中导入导出dmp数据库文件
- 如何对Oracle数据库文件进行恢复与备份
- Access数据库如何存储图片,声音文件
- ORACLE如何将本地文件以Bolb/CLOB形式存到数据库中
- 如何对Oracle数据库文件进行恢复与…
- 如何将图片以Image类型存储到数据库 如何从数据库中读取Image类型的字段
- 如何在oracle中导入dmp数据库文件?
- 如何在oracle中导入dmp数据库文件
- 用C#编程从数据库中读取图片数据导进Excel文件的方法(如何从数据库中读取保存的文件,直接打开,中间不保存到本地)
- 图片或者其他文件在数据库的存储方式详解
- 如何在oracle中导入dmp数据库文件
- 如何在oracle中导入导出dmp数据库文件