1. BLOB字段模糊查询报错

blob字段直接用select   * from  table_name  where  column  like‘%%’查找的时候是不能实现的,主要是字段类型不符。不过我们可以用数据库自带的utl_raw函数进行blob字段的插入,查询和模糊匹配。

先介绍一下Oracle中RAW和varchar2常用的两个转换函数

2. UTL_RAW.CAST_TO_RAW

该函数按照缺省字符集,将VARCHAR2字符串转换为RAW。

sys@ORCL>select

utl_raw.cast_to_raw('shall') raw1,utl_raw.cast_to_raw('zhong') raw2 from dual;

RAW1                 RAW2

-------------------- --------------------

7368616C6C           7A686F6E67

也可以用rawtohex函数实现:

sys@ORCL>select rawtohex('shall')

raw1,rawtohex('zhong') raw2 from dual;

RAW1                 RAW2

-------------------- --------------------

7368616C6C           7A686F6E67

3. UTL_RAW.CAST_TO_VARCHAR2

该函数按照缺省字符集合,将RAW转换为VARCHAR2。

sys@ORCL>select

utl_raw.cast_to_varchar2('7368616C6C')

var1,utl_raw.cast_to_varchar2('7A686F6E67') var2 from dual;

VAR1

VAR2

---------- ----------

shall

zhong

其实RAW和VARCHAR是类似的,只是存储在RAW里的是二进制值,在任何时候不会做自动的字符集转换,这是RAW和VARCHAR的不同,RAW只是一种外部类型,其内部存储是VARRAW。

4.实验:

----创建表

SQL> create table blob_test(id int,content blob);

Table

created

----插入数据

sys@ORCL>insert into blob_test values(1,'shall

zhong');

insert into blob_test values(1,'shall

zhong')

*

ERROR at line 1:

ORA-01465: invalid hex number

由报错可以看出,无法直接往blob字段中插入数据,下面用UTL_RAW.CAST_TO_RAW和,RAWTOHEX函数转换一下再插入。

SQL> insert into blob_test values(1,UTL_RAW.CAST_TO_RAW('shall

zhong'));

1 row

inserted

SQL> insert into blob_test values(1,UTL_RAW.CAST_TO_RAW('这里是BLOB字段,数据zhong'));

1 row

inserted

SQL> select * from blob_test;

ID CONTENT

----------

------------------------------------------------------------

1 7368616C6C207A686F6E67

1 D5E2C0EFCAC7424C4F42D7D6B6CEA3ACCAFDBEDD7A686F6E67

----可以看到用两个函数转换,都可以插入成功,并且可以直接查询出来,但插入到数据库里面的结果为16进制数据(注:11g的数据库可以直接查出来,10g的无法直接查询blob字段数据)。

----那么我们能直接往表中以16进制的方式插入数据吗?

SQL> insert into blob_test

values(2,'D5E2C0EFCAC7424C4F42D7D6B6CEA3ACCAFDBEDD7A686F6E67');

1 row

inserted

SQL> select id,UTL_RAW.CAST_TO_VARCHAR2(content) var1 from blob_test;

ID VAR1

----------------- ---------

1 shall zhong

1 这里是BLOB字段,数据zhong

2 这里是BLOB字段,数据zhong

----可以看出是可以直接往数据库里插入16进制数据的,并且我们可以看到用两种方式插入的结果是一致的。

----下面是对 blob 字段的修改操作

SQL> update blob_test set content=rawtohex('当前数据库环境为11G') where id =1;

2 rows updated

SQL> select id,UTL_RAW.CAST_TO_VARCHAR2(content) var1 from blob_test;

ID VAR1

----------- ---------------------------------------

1 当前数据库环境为11G

1 当前数据库环境为11G

2 这里是BLOB字段,数据zhong

SQL> update blob_test set content='7368616C6C207A686F6E67' where id =2;

1 row updated

SQL> select id,UTL_RAW.CAST_TO_VARCHAR2(content) var1 from blob_test;

ID VAR1

------------------- -----------

1 当前数据库环境为11G

1 当前数据库环境为11G

2 shall zhong

----对 blob 字段的模糊查询。

SQL> select

id,UTL_RAW.CAST_TO_VARCHAR2(content) var1 from blob_test where content like

'%shall%';

select id,UTL_RAW.CAST_TO_VARCHAR2(content)

var1 from blob_test where content like '%shall%'

*

ERROR at line 1:

ORA-00932: inconsistent datatypes: expected

NUMBER got BLOB

SQL> select

id,UTL_RAW.CAST_TO_VARCHAR2(content) var1 from blob_test where content like ' 7368616C6C207A686F6E67';

select id,UTL_RAW.CAST_TO_VARCHAR2(content)

var1 from blob_test where content like ' 7368616C6C207A686F6E67'

*

ERROR at line 1:

ORA-00932: inconsistent datatypes: expected

NUMBER got BLOB

----从上面的两个命令和报错可以看出,无法对blob字段进行模糊查询,即使用16进制数据去匹配也不行,不过我们可以通过下面的方法实现对blob字段进行模糊匹配。

SQL> select id,UTL_RAW.CAST_TO_VARCHAR2(content) var1 from blob_test

where dbms_lob.instr(content,utl_raw.cast_to_raw('shall'),1,1) > 0;

ID VAR1

--------------------------------------- -----------

2 shall zhong

SQL> select id,UTL_RAW.CAST_TO_VARCHAR2(content) var1 from blob_test

where dbms_lob.instr(content,utl_raw.cast_to_raw('G'),1,1) > 0;

ID VAR1

------------------------------ -----------

1 当前数据库环境为11G

1 当前数据库环境为11G

refencen:

http://blog.sina.com.cn/s/blog_ad6555610102v9q1.html

oracle查询blob模糊搜索,BLOB字段模糊查询相关推荐

  1. clob和blob是不是可以进行模糊查询_你知道什么是 MySQL 的模糊查询?

    作者 | luanhz 责编 | 郭芮 本文对MySQL中几种常用的模糊搜索方式进行了介绍,包括LIKE通配符.RegExp正则匹配.内置字符串函数以及全文索引,最后给出了性能对比. 引言MySQL根 ...

  2. MySQL单表多字段模糊查询解决方法

    2019独角兽企业重金招聘Python工程师标准>>> 在最近的一个项目需要实现在单表中对多字段进行多个关键字的模糊查询,但这数个关键字并不一定都存在于某个字段 例如现有table表 ...

  3. MySQL单表多字段模糊查询

    今天工作时遇到一个功能问题:就是输入关键字搜索的字段不只一个字段,比如 我输入: 超天才 ,需要检索出 包含这个关键字的 name . company.job等多个字段.在网上查询了一会就找到了答案. ...

  4. mysql 加密脱敏字段模糊查询 笔记

    mysql 加密脱敏字段模糊查询 入库的数据是要进行加密脱敏的数据:但是这个字段还要支持界面模糊匹配:这里做个笔记吧 仅供参考 insert into 的sql 大概长这样 insert into t ...

  5. Sql语句、多个字段模糊查询、

    Sql语句收获 1. select * from 表 order by time asc 最早时间在前 select * from 表 order by time desc 最新时间在前 2.模糊查询 ...

  6. Springboot项目如何设计接口中敏感字段模糊查询?

    目录 前言 场景分析 实现方案 环境配置 依赖配置 代码实现 总结 前言 在<Springboot项目如何设计接口中敏感字段的加密.解密>和<Springboot项目如何设计接口中敏 ...

  7. MySQL多重条件模糊查询_简单实现mysql多字段模糊查询

    在后台的项目中,会经常遇到,就是信息的查找,这里就举个简单的例子,如搜索某一个产品的信息,在一个表里面有多个字段,而搜索的内容可能是其中的某个字段,这样只有多字段查询才能实现. MySQL多字段模糊查 ...

  8. oracle数据库使用hint来让模糊查询走索引

    在没有创建数据直方图之前,查询优化器是cbo,可能不会选择代价最低(效率最高)的方式查询. 先创建表 --日语假名表 CREATE TABLE JAPANESE_SOUNDMARK ( ID INTE ...

  9. es java 模糊查询_java使用elasticsearch进行模糊查询-已在项目中实际应用

    java使用elasticsearch进行模糊查询 使用环境上篇文章本人已书写过,需要maven坐标,ES连接工具类的请看上一篇文章,以下是内容是笔者在真实项目中运用总结而产生,并写的是主要方法和思路 ...

最新文章

  1. Runloop, 多线程
  2. Compressor detection can only be called on some ……
  3. DrawText函数
  4. C# ThreadPool类(线程池)
  5. 几周内搞定Java的10个方法
  6. CTF Geek Challenge——第十一届极客大挑战Web Write Up
  7. Oracle数据库监听配置|转|
  8. 20172301 2018-2019-1《程序设计与数据结构》课程总结
  9. 武汉新增职位数同比下降44.25%,这些企业却在猛招人,“来多少,要多少”
  10. linux下反汇编命令,Linux命令学习手册-objdump命令
  11. java 坦克大战 素材_经典90坦克大战素材
  12. GTP编译报错,需要增加IBUF
  13. spark Streaming 流计算
  14. 『The Book of Why』导言:思维胜于数据
  15. 人到中年:最近看到的几篇好文
  16. PostgreSQL报错 ERROR: function sum(character varying) does not exist
  17. linux命令chmod、chown、chgrp详解
  18. animals中文谐音_Animals谐音歌词,Maroon5《animals》英语歌曲中文音译
  19. ce练习-搭建网盘服务
  20. spring boot实现txt下载

热门文章

  1. SuperBrother打鼹鼠
  2. 5G极化码之父造访华为 任正非称将持续基础研究投入
  3. 华为AC和AP的配置及升级方式
  4. Qt中UI线程与子线程的交互
  5. TCGA数据库学习一:基本知识
  6. 二代测序之SNV基础知识笔记总结
  7. 淘宝api开放平台买家卖家订单接口,python网络爬虫采集数据
  8. qq登陆时 (错误码:0x00000037) 的解决方法
  9. 【JavaWeb-遇错】继承或者实现Servlet相关时总是报红或者包导不进来
  10. 以太网PHY接口直连设计