请教下oracle中clob超4000长度 ,转字符串的函数怎么写

请教下oracle中clob超4000长度 ,转字符串的函数怎么写?

建议参考:https://blog.csdn.net/qq_39615545/article/details/118119150

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 := 2000; 
Begin
    If Dbms_Lob.Getlength(Blob_In) Is Null Then
        Return '';
    End If;
    For I In 1..Ceil(Dbms_Lob.Getlength(Blob_In) / V_Buffer) Loop
        -- 当转换出来的字符串乱码时: 'AMERICAN_AMERICA.ZHS16GBK' 'SIMPLIFIED CHINESE_CHINA.ZHS16GBK', 'AMERICAN_THE NETHERLANDS.UTF8'   
        -- Convert 可以忽略当前2进制数据存储使用的字符集(第三个参数) 'ZHS16GBK' 'AL32UTF8' 'ZHS32GB18030' 'ZHS16CGB231280'
--        V_Varchar := Utl_Raw.Cast_To_Varchar2(UTL_RAW.CONVERT(Dbms_Lob.Substr(Blob_In, V_Buffer), 'AL32UTF8', 'AMERICAN_AMERICA.ZHS16GBK'));
        V_Varchar := Utl_Raw.Cast_To_Varchar2(Dbms_Lob.Substr(Blob_In, V_Buffer, V_Start));
        V_Start := V_Start + V_Buffer; 
    End Loop;
    Return V_Varchar;
End Blob_To_Varchar;

SELECT Blob_To_Varchar(HEAD_IMG) FROM table WHERE HEAD_IMG IS NOT NULL;


加一个工具就可以了
如有帮助,望采纳

public static String clob2String(Clob clob){
      if(null == clob){
          return "";
      }
      Reader is = null;
      try{
          is = clob.getCharacterStream();
          BufferedReader br = new BufferedReader(is);
          StringBuilder sb = new StringBuilder();
          String temp = br.readLine();
          while(temp != null){
              sb.append(temp);
              temp = br.readLine();
          }
          return sb.toString();
      }catch (Exception e) {
          return "clobtostring转换失败";
      }finally {
          try{
              if(is != null){
                  is.close();
              }
          }catch (Exception e) {
              e.printStackTrace();
          }
      }
  }

提供参考实例,实例用2种思路去解析如何转换字符串:【oracle超过4000的字符 clob(oracle clob超过4000如何转字符串)】,链接:https://dianzubuluo.com/%E6%9C%AA%E5%91%BD%E5%90%8D/117214.html
第一种方法:使用组件System.Data.OracleClient的方法来实现
第二种方法:使用组件Oracle.DataAccess的方法实现

-----如果数据库是12C以后版本,开启扩展支持参数,varchar2可以达到32K。
-----select 查询CLOB字段可以默认转换varchar2,超出部分截断。
------如果超过CLOB均超过32K以上,再考虑使用存储过程,分段获取CLOB。
使用DBMS_LOB.SUBSTR,参考例子:

CREATE OR REPLACE PROCEDURE Example_14a IS
    src_lob        CLOB;
    pos            INTEGER := 2147483647;
    buf            VARCHAR2(32000);
BEGIN
    SELECT c_lob INTO src_lob FROM lob_table
        WHERE key_value = 21;
    buf := DBMS_LOB.SUBSTR(src_lob, 32767, pos);
    -- process the data 
END;

CREATE OR REPLACE PROCEDURE Example_14b IS
    fil BFILE;
    pos INTEGER := 2147483647;
    pattern RAW;
BEGIN
    SELECT f_lob INTO fil FROM lob_table WHERE key_value = 21;
    dbms_lob.fileopen(fil, dbms_lob.file_readonly);
    pattern := dbms_lob.substr(fil, 255, pos);
    dbms_lob.fileclose(fil);
END;