ORACLE之 访问 CLOB

访问 CLOB

CLOB 用于存放大批量的文本数据。所允许的最大数据长度为 4G 字节。在 oracle8 版本以前使用 LONG 存放大批量文本数据,且最大长度为 2G 字节。

 

示例
建立包含 CLOB 列的表

create table lob_example
(
  serial number(6) primary key,
  p_name varchar2(10),
  p_resume clob
);


初始化 CLOB 列
使用 EMPTY_CLOB() 初始化 CLOB 列。该函数没有提供任何数据,但是分配了 LOB 定位符。

insert into lob_example values(1, 'Linchong', empty_clob());
insert into lob_example values(2, 'Songjiang', empty_clob());

 

更新 CLOB 列的数据
如果要更新 CLOB 列的数据,那么在检索 CLOB 列时必须使用带有 FOR UPDATE 子句。为 CLOB 列追加数据可以使用包 DBMS_LOB 中的 WRITE 和 WRITEAPPEND。

declare
  lob_loc clob;
  text varchar2(200);
  amount int;
  offset int;
begin
  select p_resume into lob_loc from lob_example where serial=&serial for update;
  offset := dbms_lob.getlength(lob_loc)+1;
  text := '&resume';
  amount := length(text);
  dbms_lob.write(lob_loc, amount, offset, text);
  commit;
end;


读取 CLOB 列的内容
为了读取 CLOB 列的所有数据,应该使用循环方式进行处理。读取 CLOB 列的数据,使用包 DBMS_LOB.READ

declare
  lob_loc clob;
  buff varchar2(200);
  amount int;
  offset int;
begin
  select p_resume into lob_loc from lob_example where serial=&serial;
  offset := 11;
  amount := dbms_lob.getlength(lob_loc);
  dbms_lob.read(lob_loc, amount, offset, buff);
  dbms_output.put_line(buff);
end;


将文本文件内容写入到  CLOB 列
在开发 PL/SQL 应用程序时,使用过程 LOADFROMFILE 或 LOADCLOBFROMFILE。为了避免字符集问题,建议使用 LOADCLOBFROMFILE。
创建 BFILE 与本地磁盘关联的目录

create or replace directory ORCL_DIR as 'D:\tools';
declare
  lob_loc clob;
  fileloc bfile;
  amount int;
  src_offset int := 1;
  dest_offset int := 1;
  csid int := 0;
  lc int := 0;
  warning int;
begin
  fileloc := bfilename('ORCL_DIR', 'song.txt');
  dbms_lob.fileopen(fileloc, 0);
  amount := dbms_lob.getlength(fileloc);
  select p_resume into lob_loc from scott.lob_example where serial=2 for update;
  dbms_lob.loadclobfromfile(lob_loc, fileloc, amount, dest_offset, src_offset, csid, lc, warning);
  dbms_lob.fileclose(fileloc);
  commit;
end;

 

将 CLOB 列数据写入到文本文件
使用包 DBMS_LOB 读取 CLOB 列的数据,并且还需要使用 UTL_FILE 包建立文本文件并写入内容。

declare
  lob_loc clob;
  amount int;
  offset int := 1;
  buff varchar2(2000);
  handle utl_file.file_type;
begin
  select p_resume into lob_loc from scott.lob_example where serial=&serial;
  amount := dbms_lob.getlength(lob_loc);
  dbms_lob.read(lob_loc, amount, offset, buff);
  handle := utl_file.fopen('ORCL_DIR', 'lc.txt', 'w', 2000);
  utl_file.put_line(handle, buff);
  utl_file.fclose(handle);
end;

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值