前情提要:工作业务需求要把多行转为一行,因为数据库是oracle11.2以下的,用不了listagg(),只能用vm_concat()来解决了。
问题出现:用了vm_concat()之后的数据格式为clob,需要转为字符串才行。
刚开始用了to_char(vm_concat(name)),发现报错了:
,网上找了解决方案,看到用人说改为dbms_lob.substr(vm_concat(name)),测试之后发现可以的。
1.实际上处理clob字段的时候,直接to_char,当长度超过4000的时候,会报错,提示列被截取;
2.直接使用substr对clob字段进行截取,是不能起到任何作用的;
3.可以使用dbms_lob.substr(clobcolumn,4000),对clob字段进行截取;截取的长度是4000还是2000根据存储的是汉字和数据决定长度;