您的位置:首页 > 数据库

【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个长度。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: