oracle截取一个clob,PB读取Oracle clob字段

PB里完全没有针对clob的帮助,万恶的PB。

摸索几天得出以下几个方法(经实践均可行,同时亦对应的缺点需要注意):

1、clob是字符串?:clob字体为字符型大对象,其内容仅包含ASCII字符,而参考PB中String变量类型支持的最大长度为

2147483647,把clob字段看作字符型数据,直接写入字符串变量。

string ls_str

select col_clob into :ls_str from table where

condition......

缺点:clob字段内容过长时,会发生ORA-03120:

双工转换例行程序:整数溢出错误,具体溢出长度未经详细测试,但在一例子中clob内容长度超过47000时已经出错。但此长度远未达到String的理论最大长度,故估计应该是PB对clob字段进行转换时出现的内部错误。

2、clob =

blob?:PB里没有针对clob的专用语法,但却有selectblob这样的用法,不考虑其不同之处,把clob字段看作blob类型来提取,然后再转换为字符类变量数据。

blob lb_blob

string ls_str

selectblob col_clob into :lb_blob from table where

condition......

ls_str = String(lb_blob)

缺点:据网上G回来的信息,称此方法内容过多时会取数不完整,具体情况不确定,但至少之前直接取字符串出错的一例在此方法下取数正常。

3、dbms_lob包:利用dbms_lob包提供的方法处理

dbms_lob.getlength():取字段内容长度

dbms_lob.substr(col,length,start):取字段col,由start开始,长度为length的内容

string ls_len, ls_str

select dbms_lob.getlength(col_clob) into :ls_len from table

where condition......

select dbms_lob.substr(col_clob, 2000, 1) into :ls_str from

table where condition......

缺点:当clob内容长度少于2000时,取数出错;length值取太大时亦会出错 环球职业教育;建议配合getlength()函数,利用循环进行取数。

相关的主题文章:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值