各位乡亲父老,欢迎大家来捧场!江湖卖艺,生活不易!技艺交流(投稿、打广告、链接交换),请搓这里

  ORACLE中BLOB模糊查询

2019/11/21 19:00:50管理员 2425
- N +
BLOB保存的数据是无法使用“=”或者"like",直接查询的。

查询办法是将blob转成varchar2进行条件过滤:

select * from cms_offline_contents where utl_raw.cast_to_varchar2(DBMS_LOB.SUBSTR(column,2000,1)) like '%oracle%'
或者

select * from cms_offline_contents where dbms_lob.instr(file_content,utl_raw.cast_to_raw('Type'),1,1)<>0

上面的方法比较简单,但偶尔会遇到查询条件是中文,并且有可能转成varchar2有乱码,那就要用到下面的方法了:

select * from cms_offline_contents where Utl_Raw.Cast_To_Varchar2(Utl_Raw.Convert(Dbms_Lob.Substr(file_content,2000,1),'SIMPLIFIED CHINESE_CHINA.ZHS16GBK', 'AMERICAN_THE NETHERLANDS.UTF8')) like '%查询内容%'

另外更新也是同样的道理:必须先转换为字符串才能进行修改替换等操作,其它不再详细说明,直接上SQL内容:
UPDATE cms_offline_contents SET column= Utl_Raw.CAST_TO_RAW((REPLACE(Utl_Raw.Cast_To_Varchar2(column),'|','='))) WHERE Fields='条件'

特别提醒:此转换和更新只能针对BLOB的前2000字节或小于2000字节的数据进行更新和查询操作,一旦超过会报ORA-22835缓冲区太小的错误!
0人赞 分享 二维码 赏一个
选择分享方式
移步手机端
文章手机二维码

1、打开你手机的二维码扫描APP
2、扫描左则的二维码
3、点击扫描获得的网址
4、可以在手机端阅读此文章
选择打赏方式
微信赞助

打赏