Oracle查数据并使用wm_concat函数拼接字段报错:缓冲区对于 CLOB 到 CHAR 转换或 BLOB 到 RAW 转换而言太小 (实际: 4763, 最大: 4000)

 查询sql如下:

 select 
(select to_char(wm_concat(a.description)) from project_report_detail a 
 where project_report_id = t.id) as description2 ,
 t.* 
 from project_report t  
 where 1=1  order by t.dept_id 

 

然后由于project_report_detail 表的description字段是多条数据拼接成一个字段,拼接出来的结果字符串超过了sql的varchar2类型4000字符,所以报了此错:

缓冲区对于 CLOB 到 CHAR 转换或 BLOB 到 RAW 转换而言太小 (实际: 4763, 最大: 4000)

 

 

百度了一下找到了靠谱的解决办法,借鉴博客:http://www.linuxboy.net/linuxjc/137415.html

 

我的解决办法如下:查询的sql不再用to_char转成字符串,直接查出拼接字段的clob类型

 select 
(select wm_concat(a.description) from project_report_detail a 
 where project_report_id = t.id) as description2 ,
 t.* 
 from project_report t  
 where 1=1  order by t.dept_id 

 

  然后在java中,用上面博客的方法处理成String类型:

复制代码
private String ClobtoString(Clob clob){
        String reString = "";
        Reader is = null;
        try {
            is = clob.getCharacterStream();
        } catch (Exception e) {
            e.printStackTrace();
        }
        // 得到流
        BufferedReader br = new BufferedReader(is);
        String s = null;
        try {
            s = br.readLine();
        } catch (Exception e) {
            e.printStackTrace();
        }
        StringBuffer sb = new StringBuffer();
        while (s != null) {
            // 执行循环将字符串全部取出付值给StringBuffer由StringBuffer转成STRING
            sb.append(s);
            try {
                s = br.readLine();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        reString = sb.toString();
        return reString;
    }
复制代码

 

 

成功解决,亲测有效

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @   下课后我要去放牛  阅读(1464)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示