CLOB里保存的文本格式是
[NAME
李大哥
AGE
20
…]
或者
[暂无登记]
业务要求:要查询出来CLOB的内容,并且找到里面有个文本是 '暂无登记’的数据。
涉及到的操作:
去除换行:select replace(字段名,chr(10),’’) from dual;
去除回车:select replace(字段名,chr(13),’’) from dual;
去掉左右空格:select trim(字段名) from dual;
判断COLB的长度:select DBMS_LOB.GETLENGTH(字段名) from 表名;
转换COLB为字符:select DBMS_LOB.SUBSTR(字段名,4000) from 表名;
期间可能报错:
60502:缓冲区太小,我的解决办法是把查询的from后面的表的数据缩减,先把一些限制条件加入子表,(因为基表很大,但是业务数据只有几百条,用几个条件先筛选一部分数据)解决了这个问题。
64203:CLOB中格式符号太多,需要只摘取文本,就可以解决这个问题。
最后将以上提到的都组合在一起就是
select trim(replace(replace(t1.字段名,chr(10),’’),chr(13),’’))
from (select 字段名 from Table t where t.id = ? and DBMS_LOB.GETLENGTH(t.字段名) <6 and ) t1
where DBMS_LOB.SUBSTR(t1.字段名,4000) = ‘暂无登记’;
(这里其实可以不用子查询也是可以的)