clob、nclob是什么
CLOB里存的是2进制,可以存储2G大小的数据。
常用函数:
判定长度 DBMS_LOB.GETLENGTH(lob)
获取文本 DBMS_LOB.SUBSTR(lob,n,pos)
DBMS_LOB.SUBSTR(lob,10,1) 表示从第1个字节开始取出10个字节
DBMS_LOB.SUBSTR(CLOB_VAR,32767) 表示截取CLOB变量保存的全部数据
DBMS_LOB.FILECLOSE(IMG_BFILE) 关闭文件
快速查询sql
查询思路,使用DBMS_LOB.GETLENGTH()函数获取长度,然后使用DBMS_LOB.SUBSTR(col1,n,pos)函数截取获得文本,比直接获取clob字段效率快很多倍
原语句:
select param_value from sys_param ;
优化后的语句:
select DBMS_LOB.SUBSTR(param_value,DBMS_LOB.GETLENGTH(param_value),1) as custom1 from sys_param ;
对比一下,发现优化后的语句速度快了很多。
解决方法:通过dbms_lob.substr 函数取出子串,然后通过 || 拼接起来,比如:
select DBMS_LOB.SUBSTR(content,4000,1) ||
DBMS_LOB.SUBSTR(content,4000,4001) ||
DBMS_LOB.SUBSTR(content,4000,8001) ||
DBMS_LOB.SUBSTR(content,4000,12001)
from xxx;
第二种使用 xmlagg拼接
xmlagg(xmlparse(content 内容 || ‘,’ wellformed) order by 字段).getclobval();
如果对字符长度有限制则可以截取
substr(xmlagg(xmlparse(content 内容 || ‘,’ wellformed) order by 字段).getclobval(), 0, 1024);