【PLSQL】如何对BLOB字段进行like操作
2015-10-09 12:58
1631 查看
Oracle数据库的blob字段用来存储非结构化的二进制大对象。
和CLOB不同(CLOB用来存储字符数据),blob一般用来存储图片,视频,语音等二进制对象。
当然blob也可以用来存储字符数据。
来看如下生产表:
create table CCT_LOG_SECONDCSC_201504
(
indictseq VARCHAR2(40),
dis_num INTEGER,
accept_id VARCHAR2(20),
appeal_type VARCHAR2(4),
description VARCHAR2(400),
send_text BLOB,
return_text BLOB,
send_time DATE,
return_time DATE
)
其中,send_text和return_text字段为blob字段。
SQL> select send_text,return_text
2 from CCT_LOG_SECONDCSC_201504
3 where accept_id = '2015040101048'
4 and appeal_type = 'B02'
5 ;
SEND_TEXT RETURN_TEXT
--------- -----------
<BLOB> <BLOB>
SQL>
大字段在sqlplus上不能显示,需要某种ide工具(如PLSQL Developer):
使用ide来查看blob的内容非常适合(前提是blob里存储的是character data):
这个ide工具,可以对大字段进行各种可能的方式的查看。
那么我们如何对blob里面的字符进行like呢?比如我们想要like图里椭圆形部分BIPCode的值:
select utl_raw.cast_to_varchar2(dbms_lob.substr(send_text, 250, 1)),
case
when utl_raw.cast_to_varchar2(dbms_lob.substr(send_text, 250, 1)) like
'%<BIPCode>BIP2C055</BIPCode>%' then
1
else
0
end
from CCT_LOG_SECONDCSC_201504 a
where accept_id = '2015040101048'
and appeal_type = 'B02'
如图:
函数dbms_lob.substr(send_text, 250, 1)的返回类型是raw类型,必须使用utl_raw.cast_to_varchar2方法转换为varchar2的可读形式,然后再like操作。
dbms_lob.substr(send_text, 250, 1),表示将send_text字段从偏移处1开始提取250个长度。
和CLOB不同(CLOB用来存储字符数据),blob一般用来存储图片,视频,语音等二进制对象。
当然blob也可以用来存储字符数据。
来看如下生产表:
create table CCT_LOG_SECONDCSC_201504
(
indictseq VARCHAR2(40),
dis_num INTEGER,
accept_id VARCHAR2(20),
appeal_type VARCHAR2(4),
description VARCHAR2(400),
send_text BLOB,
return_text BLOB,
send_time DATE,
return_time DATE
)
其中,send_text和return_text字段为blob字段。
SQL> select send_text,return_text
2 from CCT_LOG_SECONDCSC_201504
3 where accept_id = '2015040101048'
4 and appeal_type = 'B02'
5 ;
SEND_TEXT RETURN_TEXT
--------- -----------
<BLOB> <BLOB>
SQL>
大字段在sqlplus上不能显示,需要某种ide工具(如PLSQL Developer):
使用ide来查看blob的内容非常适合(前提是blob里存储的是character data):
这个ide工具,可以对大字段进行各种可能的方式的查看。
那么我们如何对blob里面的字符进行like呢?比如我们想要like图里椭圆形部分BIPCode的值:
select utl_raw.cast_to_varchar2(dbms_lob.substr(send_text, 250, 1)),
case
when utl_raw.cast_to_varchar2(dbms_lob.substr(send_text, 250, 1)) like
'%<BIPCode>BIP2C055</BIPCode>%' then
1
else
0
end
from CCT_LOG_SECONDCSC_201504 a
where accept_id = '2015040101048'
and appeal_type = 'B02'
如图:
函数dbms_lob.substr(send_text, 250, 1)的返回类型是raw类型,必须使用utl_raw.cast_to_varchar2方法转换为varchar2的可读形式,然后再like操作。
dbms_lob.substr(send_text, 250, 1),表示将send_text字段从偏移处1开始提取250个长度。
相关文章推荐
- Mysql 主从复制-Binlog详细解析(Row格式)
- kettle 通过JDBC 连接SQL Server(Error occurred while trying to connect to the database)
- 让mysql支持emoji表情
- Mysql循环的三种方式
- 数据库基础
- linux mysql jdk mongodb web
- Memcached缓存在.Net 中的使用(memcacheddotnet)
- tomcat8、nginx1.8、memcached1.4.20实现集群和session共享
- 关于时间比较,ORA-01861: literal does not match format string
- Linux下MongoDB安装与配置
- MongoDB学习——基础入门
- MySQL双机热备部署
- 欢迎使用CSDN-markdown编辑器
- Nginx+Tomcat+Memcached部署应用
- [每天一点点]->[SQL语句] limit使用详解
- oracle客户端的安装和plsql的远程连接教程
- Oracle Partition Outer Join 稠化报表
- Oracle dblink详解
- ADO+MFC数据库编程常用SQL语句
- 【干货】不同场景下 如何进行MySQL迁移