dbms_lob.instr()操作——查找blob数据中的字符串

oracle数据库中,在blob类型数据中存储了文本文件,需要查询出哪些记录的content字段(blob类型)包含“菠萝”这个词。

一开始使用SQL语句: select id,content from text where CONTENT LIKE '%菠萝%'

出现错误:ORA-00932:数据类型不一致:应为NUMBER,但却获得BLOB


后得知可以使用dbms_lob包对文本内容进行操作。

dbms_lob.instr()语法为:

INSTR(源字符串, 目标字符串, 起始位置, 匹配序号)
源字符串:字符串或者列
目标字符串:要定位的字符串
起始位置:开始的位置
匹配序号:目标字符串第几次出现

注意:开始位置是从1开始的


因此将SQL查询语句修改为:select id,content from text WHERE dbms_lob.instr(CONTENT,'菠萝',1,1)>0

出现错误:ORA-01465:无效的十六进制数字(指‘菠萝’无效)

需要将菠萝转成有效的十六进制,因为Oracle中用于保存位串的数据类型是RAW,LONG RAW(推荐使用BLOB),所以使用utl_raw.cast_to_raw([varchar2]);--将varchar2转换为raw类型。


将SQL语句修改为:

select id,content 

from text 

where dbms_lob.instr(content,utl_raw.CAST_TO_RAW('菠萝'),1,1)>0;

成功获取含有'菠萝'字符串的记录


部分内容摘自:

http://blog.csdn.net/john2522/article/details/8124087

http://blog.csdn.net/pc_gad/article/details/47100863


  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值