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()函数,利用循环进行取数。
相关的主题文章: