oracle表中一个字段内容导出到磁盘上

有没有遇到过这样的问题,

系统设计的时候,会把一些内容比较大的文本内容存入到表中(oracle longe类型最大可以存放2G的文本)

刚开始也许不会有什么问题,但是时间长了,数据量大了,经常频繁的insert,update之后,效率开始变低了,

而且备份也会有磁盘大小和备份耗时越来越长的问题。

现在要改变原先的设计

把文本内容导出到一个目录中,每条记录对应一个文件,文件名就使用该记录的主键值,

这样使用exp备份的时候就不要备份这些文本内容了

下面的存储过程,使用Oracle中内置程序包:utl_file

 

--创建要导出文件存放目录
create or replace directory ETF AS
'f:/exportHTML/';
/

--创建导出存储过程
--
使用主键值作为文件名称
--
selectSQL: select id,html from mytable
create or replace procedure exportToFile(selectSQL varchar2) as
v_file utl_file.file_type;
v_html
long; --导出字段
v_id varchar2(64); --主键值,文件名称

type refcur_t
is ref cursor;
refcur refcur_t;
begin
v_dir :
= 'ETF'; --上面定义的目录名称

open refcur for selectSQL; --打开游标
--
循环游标提取数据
loop
fetch refcur
into v_id, v_html;
exit when refcur%notfound;

--打开文件
v_file := utl_file.fopen(v_dir, v_id||'.html', 'w');
--写入
utl_file.put(v_file,v_html);
--关闭
utl_file.fclose(v_file);
/**/
end loop;
close refcur; --关闭游标
EXCEPTION
when others then
if utl_file.is_open(v_file) then
utl_file.fclose(v_file);
end if;
end;
/

 

 

posted @ 2010-04-27 12:03 看风景的人 阅读(177) 评论(0) 编辑 收藏