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()函数,利用循环进行取数。

相关的主题文章:

你可能感兴趣的:(oracle截取一个clob)