【PLSQL】如何对BLOB字段进行like操作

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个长度。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值