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
    ————————————————
    版权声明:本文为CSDN博主「aicongming」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/ai2449874264/article/details/69266836