Oracle中CLOB和BLOB字段虽说在开发中满足了存放超大内容的要求,但是在一些简单使用中确频频带来麻烦。CLOB中存放的是指针,并不能直接取到实际值。而SQLServer中的text字段就很方便,可以直接拿来与需要的字符串比对,象什么等于呀小于呀Like呀不在话下。可是换成Oracle就麻烦死了,要开辟一个缓存,把内容一段段读取出来后转换,难道写个where条件都这么复杂?经过多方寻求资料,终于发现一个方便简单的方法:利用dbms_lob 包中的方法(放心,内置的)instr和substr 。具体的介绍如下:

instr函数与substr函数

instr函数用于从指定的位置开始,从大型对象中查找第N个与模式匹配的字符串。
用于查找内部大对象中的字符串的instr函数语法如下:

1:  dbms_lob.instr(
2:  lob_loc in clob character set any_cs,
3:  pattern in varchar2 character set lob_loc%charset,
4:  offset in integer:=1,
5:  nth in integer := 1)
6:  return integer; 
7:   

lob_loc为内部大对象的定位器
pattern是要匹配的模式
offset是要搜索匹配文件的开始位置
nth是要进行的第N次匹配

substr函数
substr函数用于从大对象中抽取指定数码的字节。当我们只需要大对象的一部分时,通常使用这个函数。
操作内部大对象的substr函数语法如下:

其中各个参数的含义如下:
lob_loc是substr函数要操作的大型对象定位器
amount是要从大型对象中抽取的字节数
offset是指从大型对象的什么位置开始抽取数据。

如果从大型对象中抽取数据成功,则这个函数返回一个 raw 值。如果有一下情况,则返回null:
1 任何输入参数尾null
2 amount < 1
3 amount > 32767
4 offset < 1
5 offset > LOBMAXSIZE

 1:  dbms_lob.instr(
 2:  lob_loc in blob, 
 3:  pattern in raw, 
 4:  offset in integer := 1;
 5:  nth in integer := 1)
 6:  return integer; 
 7:  dbms_lob.substr(
 8:    lob_loc in blob, 
 9:    amount in integer := 32767,
10:    offset in integer := 1)
11:  return raw; 
12:  dbms_lob.substr(
13:    lob_loc in clob character set any_cs, 
14:    amount in integer := 32767,
15:    offset in integer := 1)
16:  return varchar2 character set lob_loc%charset; 

照下面示例,很容易看懂:

 1:  declare 
 2:     source_lob clob;
 3:     pattern varchar2(6) := 'Oracle';
 4:     start_location integer := 1;
 5:     nth_occurrence integer := 1;
 6:     position integer;
 7:     buffer varchar2(100);
 8:  begin
 9:     select clob_locator into source_lob from mylobs where lob_index = 4;
10:     position := dbms_lob.instr(source_lob, pattern, start_location, nth_occurrence);
11:     dbms_output.put_line('The first occurrence starts at position:' || position);
12:   
13:     nth_occurrence := 2;
14:     select clob_locator into source_lob from mylobs where lob_index = 4;
15:     position := dbms_lob.instr(source_lob, pattern, start_location, nth_occurrence);
16:     dbms_output.put_line('The first occurrence starts at position:' || position);
17:   
18:     select clob_locator into source_lob from mylobs where lob_index = 5;
19:     buffer := dbms_lob.substr(source_lob, 9, start_location);
20:     dbms_output.put_line('The substring extracted is: ' || buffer);
21:  end; 

输出结果为:
The first occurrence starts at position:8
The first occurrence starts at position:24
The substring extracted is: Oracle 9i

哈哈,轻松搞定CLOB字段的比对匹配筛选,不用一大堆的存储过程和函数,祝大家好运!

转载于:https://www.cnblogs.com/tristinjet/archive/2009/11/09/1599349.html

解决比较Oracle中CLOB字段问题相关推荐

  1. Mysql 查询blob数据很慢,关于oracle中clob字段查询慢的问题及解决方法

    关于oracle中clob字段查询慢的问题及解决方法 最近在用oracle的过程中用到了对blob字段模糊查询的问题,对oracle来说,我并不是高手,找了很多的资料终于能够查出来了. blob字段直 ...

  2. mysql clob转string_Java获取Oracle中CLOB字段转换成String

    Java获取Oracle中CLOB字段转换成String : try {PreparedStatement stmt = session.connection().prepareStatement(s ...

  3. java Clob转CLOB_Java获取Oracle中CLOB字段转换成String

    Java获取Oracle中CLOB字段转换成String : try {PreparedStatement stmt = session.connection().prepareStatement(s ...

  4. java oracle 换行,oracle中Clob字段中的回车换行在jsp中展示的问题

    在开发过程出现这么一个问题: 比如:一个字段content 类型CLOB,这其中存的有可能复制粘贴过来的word excel html中的内容,用java将这些内容存入,存入后有特殊的符号 比如回车换 ...

  5. oracle clob 查询换行,oracle中Clob字段中的回车换行在jsp中展示的问题

    在开发过程出现这么一个问题: 比如:一个字段content 类型CLOB,这其中存的有可能复制粘贴过来的word excel html中的内容,用java将这些内容存入,存入后有特殊的符号 比如回车换 ...

  6. oracle clob 类型条件,Oracle中Clob类型如何处理?

    Oracle中Clob类型处理解析最近利用NHibernate映射类型为Clob字段在插入数据时发现当字符的字节数(一个半角字符一个字节,一个全角字符两个字节)在 2000-4000之间时报错(ORA ...

  7. java将clob类型文件写到磁盘_Java对Oracle中Clob类型数据的读取和写入

    Java对Oracle中Clob数据类型是不能够直接插入的,但是可以通过流的形式对clob类型数据写入或者读取,网上代码并不算特别多,讲的 Java对Oracle中Clob数据类型是不能够直接插入的, ...

  8. 读取oracle bfile字段,ORACLE中BFILE字段的使用研究_oracle

    因为做项目,需要使用BFILE字段存储图像文件,所以进行了一些研究. bfile字段实际的文件存储在文件系统中,字段中存储的是文件定位指针.bfile对 oracle来说是只读的,也不参与事务性控制和 ...

  9. ORACLE中BFILE字段的使用研究

    ORACLE中BFILE字段的使用研究 收藏 因为做项目,需要使用BFILE字段存储图像文件,所以进行了一些研究. bfile字段实际的文件存储在文件系统中,字段中存储的是文件定位指针.bfile对 ...

  10. clob在java里的类型_Java对Oracle中Clob类型数据的读取和写入(转)

    Java对Oracle中Clob数据类型是不能够直接插入的,但是可以通过流的形式对clob类型数据写入或者读取,网上代码并不算特别多,讲的也不是很清楚,我对网上资料进行了整理和总结,具体看代码: 写入 ...

最新文章

  1. 2021年UI设计培训机构哪个好
  2. NLP通用模型decaNLP诞生,一个模型搞定十大自然语言常见任务
  3. oracle 用函数返回对象集合
  4. 《SAS编程与数据挖掘商业案例》学习笔记之一
  5. 前端学习(2938):vue对象之间的实例属性ref
  6. win7在未关闭vmware情况下直接关机,导致虚拟机无法克隆
  7. Docker用法整理
  8. 【Java】命令行生成JavaDoc文档
  9. 如何将第三方控件嵌入ToolStrip控件,并提供Design-Time支持
  10. java 多线程同步 通过实现Runnable的示例
  11. python3写网络爬虫_python3写网络爬虫
  12. NYOJ-拦截导弹(dp)
  13. java经典实例 源代码_100个Java经典编程实例源代码JAVA源码下载
  14. LED用DMX512协议整个系统怎么连接?
  15. 中兴c600olt数据配置_中兴OLT业务配置
  16. dep指定版本 go_Go语言包管理工具dep的安装与使用
  17. 算法学习(一)——Minimax算法
  18. LED背光源优势的表现
  19. 名人名言大全API 推荐
  20. 图数据库 Dgraph 学习笔记

热门文章

  1. Sublime Text快捷键
  2. C#三层架构详细解剖
  3. 【一天一算法】冒泡排序
  4. [生活日记] 社会真的这么乱?尼姑也行骗,道德何在
  5. git 非空目录添加远程仓库地址
  6. [数据结构] 左偏树
  7. 获取元素的位置信息的方法
  8. php 和 java_Java和php怎么选择??
  9. 服务器内存 知乎_巨炮快评! 篇六:16核32线程384GB内存!双路Intel至强数据服务器拆解...
  10. 网页设计图片向上浮动_CSS实现图片向上浮动