Oracle9i数据库存储和读取clob文件(PL/SQL脚本)

原创 2005年04月26日 11:14:00

//先建立表 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;

//创建目录,保存在c盘根目录
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中,c盘下要有这两个文件
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');

//哈哈,文件被保存在c盘了啊,快去看看吧

//对了,文件大了会导致缓冲区太小,缓冲区最大允许36k,大了我也不知道怎么办,正在解决中!

作者:飞仙化羽

邮箱:wujianyu2000@hotmail.com

                               @转载请注明作者


Oracle PL/SQL处理CLOB字段的经验

clob
  • wangdeng1314
  • wangdeng1314
  • 2010年06月11日 16:07
  • 2640

pl/sql developer 导出数据库中的表到可执行的.sql 脚本文件

PL/SQL自带导出数据库中表到.sql脚本文件的工具。 1.在objects窗口中,选中表》右击》Export Data 2.选》SQL Inserts 选择:Create tables,其他选...
  • steambreadpp
  • steambreadpp
  • 2015年06月08日 17:18
  • 1230

在plsql中,总是遇到在clob类型字段上存储数据出错--字符串太长,现在有一个比较简单的解决办法

//利用传参数                         OracleConnection Con = new System.Data.OracleClient.OracleConnectio...
  • gxxloveszj
  • gxxloveszj
  • 2012年11月27日 17:06
  • 2445

window7 下oracle 9i客户端安装与pl/sql developer

最近内存升级到4G,但可怜的xp只能利用到3G左右,为了充分利用内存,狠心将xp系统换成了win7.  oracle客户端之前在xp下安装在D盘,安装win7时只格式化了C盘,oracle客户端的相...
  • qshpeng
  • qshpeng
  • 2014年03月23日 16:49
  • 4766

PL/SQL Developer中打印超长clob字段

---打印超长的clob字符------------------------------------------ declare c1 clob; strLog varchar2(2000...
  • wangdonghao137
  • wangdonghao137
  • 2014年08月20日 14:11
  • 2611

关于apache的commons-dbutils如何读取blob类型

查询dbutils相关api没有发现如何处理,于是用下面的代码进行转换,经测试有效。获取到的inputStream可按自己需求转换为相关类型。如果有更好的方法,欢迎指教。...
  • jxjyzzc
  • jxjyzzc
  • 2017年04月01日 16:55
  • 323

plsql 查询blob数据和clob数据类型

plsql 查询blob数据和clob数据
  • loveuserzzz
  • loveuserzzz
  • 2016年10月26日 15:23
  • 2843

谈谈有关各数据库Blob、Clob类型字段的读取、保存更新

经常有人谈到Blob类型字段的读写问题,我也来说两句。   最近在写一些东西,对常用数据库的数据类型、函数等作了一些比较,也写了许多了的测试代码,以下是我测试的结果:测试数据库: MS Sql Ser...
  • yakoo5
  • yakoo5
  • 2009年07月15日 10:56
  • 7903

PL/SQL存储函数,存储过程

一.存储过程和存储函数 存储过程和存储函数跟我们知道的表、视图、索引、序列、同义词等一样是我们数据中的对象。 1.1什么是存储过程和存储函数: 指存储在数据库中供所有的用户程序调用的 子程序叫存储...
  • u014292162
  • u014292162
  • 2016年10月30日 17:04
  • 2083

PL/SQL美化规则文件详解

引言:我们都知道任何一种语言,都应该讲究一定的规范,因为优秀的代码通常都是先让人读懂,其次才是机器读懂。否则没有任何规范和解释说明的代码,后期维护会增加很多成本,即使是开发者自己维护有时后也会忘了个中...
  • CrazyMo_
  • CrazyMo_
  • 2015年05月21日 12:58
  • 2958
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Oracle9i数据库存储和读取clob文件(PL/SQL脚本)
举报原因:
原因补充:

(最多只允许输入30个字)