日期:2014-05-16  浏览次数:20704 次

oracle中clob字段处理
我在oracle存储过程中有一大字段类型(CLOB),如何将这个大字段类型的转成varchar2.
因为我在游标中,又用了这个大字段类型来拼装游标的SQL,结果oralce不认识。请大侠指点:
serarchSql :按条件拼装的查询SQL,其中包含了CLOB字段的数据
projectTableInfo :自定义游标
OPEN projectTableInfo FOR serarchSql;

结果两者一结合,oracle不认识,原本serarchSql是varchar2类型,里面包含了clob类型之后,oralce自动转换了变成了long类型。

妄求大侠指点!
------解决方案--------------------
用dbms_lob.substr(<字段值>)转为varchar2
------解决方案--------------------
CREATE OR REPLACE FUNCTIon "BLOB_TO_VARCHAR" (blob_in IN BLOB)
RETURN VARCHAR2
IS

v_varchar VARCHAR2(4000);
v_start PLS_INTEGER := 1;
v_buffer PLS_INTEGER := 4000;

BEGIN


 if DBMS_LOB.GETLENGTH(blob_in) is null then
        return empty_clob();
 end if;

 FOR i IN 1..CEIL(DBMS_LOB.GETLENGTH(blob_in) / v_buffer)
 LOOP

 v_varchar := UTL_RAW.CAST_TO_VARCHAR2(utl_raw.convert(DBMS_LOB.SUBSTR(blob_in, v_buffer, v_start),'SIMPLIFIED CHINESE_CHINA.ZHS16GBK', 'AMERICAN_THE NETHERLANDS.UTF8'));


 v_start := v_start + v_buffer;
 END LOOP;

 RETURN v_varchar;

end blob_to_varchar;