oracle怎样读取lob字段,读取clob字段的内容

CREATE TABLE NYYTEST.LOB_TABLE

(

ID NUMBER(10) NOT NULL,

IN_LOB CLOB NULL,

OUT_LOB

CLOB NULL

)

/

Dbms_lob.read用于将lob类型的数据读入到缓冲区中

Dbms_lob.read(

Lob_loc IN BLOB/clob/bfile,  amount INOUT BINARY_INTEGER,  offset IN INTEGER,  buffer OUT RAW

)

lob_loc:要读取的LOB定位器  amount:要读取的字节数

offset:开始读取操作的偏移量

buffer:存储读操作结果的缓冲区

declare

lob_col clob;

buffer varchar2(2000);

amount int;

offset int;

begin

select out_lob into lob_col

from lob_table

where id=10;

offset:=1;--从第一位开始

amount:=dbms_lob.getlength(lob_col);--获取该字段存储的数据的长度

dbms_lob.read(lob_col,amount,offset,buffer);--读取内容到缓冲区

dbms_output.put_line(buffer);--缓冲区内容输出

end;

执行程序报错:numeric or value error string:characher string buffer too

small

查找错误原因:

对于10g以上版本(包括10g), dbms_output.put_line的最大长度限制是32767

在Oracle

10g之前,使用Dbms_Output.Put_Line进行输出调试,如果输出信息单行超过255个字符,则会提示错误

解决办法:采用循环的方式,每次读取200字符的内容

declare

lob_col clob;

buffer varchar2(2000);

amount int;

amount1 int;

offset int;

offset1 int;

VAR Number:=0;

num Number:=0;

begin

select out_lob into lob_col

from lob_table

where id=10;

offset:=1;

amount:=dbms_lob.getlength(lob_col);

amount1:=200;

var:=round(amount/amount1);---循环次数

loop

dbms_lob.read(lob_col,amount1,offset,buffer);---将内容赋给buffer变量

num:=num+1;

offset:=offset+200;

dbms_output.put_line(buffer);打印本次读取的内容

exit when num=var;

end loop;

end;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值